summaryrefslogtreecommitdiff
path: root/make
diff options
context:
space:
mode:
Diffstat (limited to 'make')
-rw-r--r--make/configure.pm283
-rw-r--r--make/gnutlscert.pm116
-rw-r--r--make/opensslcert.pm37
-rw-r--r--make/utilities.pm384
4 files changed, 4 insertions, 816 deletions
diff --git a/make/configure.pm b/make/configure.pm
index b384ac109..3e1a38333 100644
--- a/make/configure.pm
+++ b/make/configure.pm
@@ -1,282 +1 @@
-#
-# Copyright 2002-2007 The ChatSpike Development Team
-# <brain@chatspike.net>
-# <Craig@chatspike.net>
-#
-# Licensed under GPL, please see the COPYING file
-# for more information
-#
-
-package make::configure;
-use Exporter 'import';
-use POSIX;
-use make::utilities;
-@EXPORT = qw(promptnumeric dumphash is_dir getmodules getrevision getcompilerflags getlinkerflags getdependencies resolve_directory yesno showhelp promptstring_s);
-
-my $no_svn = 0;
-
-sub yesno {
- my ($flag,$prompt) = @_;
- print "$prompt [\033[1;32m$main::config{$flag}\033[0m] -> ";
- chomp($tmp = <STDIN>);
- if ($tmp eq "") { $tmp = $main::config{$flag} }
- if (($tmp eq "") || ($tmp =~ /^y/i))
- {
- $main::config{$flag} = "y";
- }
- else
- {
- $main::config{$flag} = "n";
- }
- return;
-}
-
-sub resolve_directory
-{
- my $ret = $_[0];
- eval
- {
- use File::Spec;
- $ret = File::Spec->rel2abs($_[0]);
- };
- return $ret;
-}
-
-sub getrevision {
- if ($no_svn)
- {
- return "0";
- }
- my $data = `svn info`;
- if ($data eq "")
- {
- $no_svn = 1;
- $rev = "0";
- return $rev;
- }
- $data =~ /Revision: (\d+)/;
- my $rev = $1;
- if (!defined($rev))
- {
- $rev = "0";
- }
- return $rev;
-}
-
-sub getcompilerflags {
- my ($file) = @_;
- open(FLAGS, $file);
- while (<FLAGS>) {
- if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) {
- close(FLAGS);
- return translate_functions($1,$file);
- }
- }
- close(FLAGS);
- return undef;
-}
-
-sub getlinkerflags {
- my ($file) = @_;
- open(FLAGS, $file);
- while (<FLAGS>) {
- if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) {
- close(FLAGS);
- return translate_functions($1,$file);
- }
- }
- close(FLAGS);
- return undef;
-}
-
-sub getdependencies {
- my ($file) = @_;
- open(FLAGS, $file);
- while (<FLAGS>) {
- if ($_ =~ /^\/\* \$ModDep: (.+) \*\/$/) {
- close(FLAGS);
- return translate_functions($1,$file);
- }
- }
- close(FLAGS);
- return undef;
-}
-
-
-sub getmodules
-{
- my $i = 0;
- print "Detecting modules ";
- opendir(DIRHANDLE, "src/modules");
- foreach $name (sort readdir(DIRHANDLE))
- {
- if ($name =~ /^m_(.+)\.cpp$/)
- {
- $mod = $1;
- if ($mod !~ /_static$/)
- {
- $main::modlist[$i++] = $mod;
- print ".";
- }
- }
- }
- closedir(DIRHANDLE);
- print "\nOk, $i modules.\n";
-}
-
-sub promptnumeric($$)
-{
- my $continue = 0;
- my ($prompt, $configitem) = @_;
- while (!$continue)
- {
- print "Please enter the maximum $prompt?\n";
- print "[\033[1;32m$main::config{$configitem}\033[0m] -> ";
- chomp($var = <STDIN>);
- if ($var eq "")
- {
- $var = $main::config{$configitem};
- }
- if ($var =~ /^\d+$/) {
- # We don't care what the number is, set it and be on our way.
- $main::config{$configitem} = $var;
- $continue = 1;
- print "\n";
- } else {
- print "You must enter a number in this field. Please try again.\n\n";
- }
- }
-}
-
-sub promptstring_s($$)
-{
- my ($prompt,$default) = @_;
- my $var;
- print "$prompt\n";
- print "[\033[1;32m$default\033[0m] -> ";
- chomp($var = <STDIN>);
- $var = $default if $var eq "";
- print "\n";
- return $var;
-}
-
-sub dumphash()
-{
- print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n";
- print "\033[0mBase install path:\033[1;32m\t\t$main::config{BASE_DIR}\033[0m\n";
- print "\033[0mConfig path:\033[1;32m\t\t\t$main::config{CONFIG_DIR}\033[0m\n";
- print "\033[0mModule path:\033[1;32m\t\t\t$main::config{MODULE_DIR}\033[0m\n";
- print "\033[0mLibrary path:\033[1;32m\t\t\t$main::config{LIBRARY_DIR}\033[0m\n";
- print "\033[0mMax connections:\033[1;32m\t\t$main::config{MAX_CLIENT}\033[0m\n";
- print "\033[0mMax nickname length:\033[1;32m\t\t$main::config{NICK_LENGT}\033[0m\n";
- print "\033[0mMax channel length:\033[1;32m\t\t$main::config{CHAN_LENGT}\033[0m\n";
- print "\033[0mMax mode length:\033[1;32m\t\t$main::config{MAXI_MODES}\033[0m\n";
- print "\033[0mMax ident length:\033[1;32m\t\t$main::config{MAX_IDENT}\033[0m\n";
- print "\033[0mMax quit length:\033[1;32m\t\t$main::config{MAX_QUIT}\033[0m\n";
- print "\033[0mMax topic length:\033[1;32m\t\t$main::config{MAX_TOPIC}\033[0m\n";
- print "\033[0mMax kick length:\033[1;32m\t\t$main::config{MAX_KICK}\033[0m\n";
- print "\033[0mMax name length:\033[1;32m\t\t$main::config{MAX_GECOS}\033[0m\n";
- print "\033[0mMax away length:\033[1;32m\t\t$main::config{MAX_AWAY}\033[0m\n";
- print "\033[0mGCC Version Found:\033[1;32m\t\t$main::config{GCCVER}.x\033[0m\n";
- print "\033[0mCompiler program:\033[1;32m\t\t$main::config{CC}\033[0m\n";
- print "\033[0mStatic modules:\033[1;32m\t\t\t$main::config{STATIC_LINK}\033[0m\n";
- print "\033[0mIPv6 Support:\033[1;32m\t\t\t$main::config{IPV6}\033[0m\n";
- print "\033[0mIPv6 to IPv4 Links:\033[1;32m\t\t$main::config{SUPPORT_IP6LINKS}\033[0m\n";
- print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$main::config{USE_GNUTLS}\033[0m\n";
- print "\033[0mOpenSSL Support:\033[1;32m\t\t$main::config{USE_OPENSSL}\033[0m\n\n";
-}
-
-sub is_dir
-{
- my ($path) = @_;
- if (chdir($path))
- {
- chdir($main::this);
- return 1;
- }
- else
- {
- # Just in case..
- chdir($main::this);
- return 0;
- }
-}
-
-sub showhelp
-{
- chomp($PWD = `pwd`);
- print "Usage: configure [options]
-
-*** NOTE: NON-INTERACTIVE CONFIGURE IS *NOT* SUPPORTED BY THE ***
-*** INSPIRCD DEVELOPMENT TEAM. DO NOT ASK FOR HELP REGARDING ***
-*** NON-INTERACTIVE CONFIGURE ON THE FORUMS OR ON IRC! ***
-
-Options: [defaults in brackets after descriptions]
-
-When no options are specified, interactive
-configuration is started and you must specify
-any required values manually. If one or more
-options are specified, non-interactive configuration
-is started, and any omitted values are defaulted.
-
-Arguments with a single \"-\" symbol, as in
-InspIRCd 1.0.x, are also allowed.
-
- --disable-interactive Sets no options intself, but
- will disable any interactive prompting.
- --update Update makefiles and dependencies
- --modupdate Detect new modules and write makefiles
- --svnupdate {--rebuild} Update working copy via subversion
- {and optionally rebuild if --rebuild
- is also specified}
- --clean Remove .config.cache file and go interactive
- --enable-gnutls Enable GnuTLS module [no]
- --enable-openssl Enable OpenSSL module [no]
- --with-nick-length=[n] Specify max. nick length [32]
- --with-channel-length=[n] Specify max. channel length [64]
- --with-max-clients=[n] Specify maximum number of users
- which may connect locally
- --enable-optimization=[n] Optimize using -O[n] gcc flag
- --enable-epoll Enable epoll() where supported [set]
- --enable-kqueue Enable kqueue() where supported [set]
- --disable-epoll Do not enable epoll(), fall back
- to select() [not set]
- --disable-kqueue Do not enable kqueue(), fall back
- to select() [not set]
- --enable-ipv6 Build ipv6 native InspIRCd [no]
- --enable-remote-ipv6 Build with ipv6 support for remote
- servers on the network [yes]
- --disable-remote-ipv6 Do not allow remote ipv6 servers [not set]
- --with-cc=[filename] Use an alternative g++ binary to
- build InspIRCd [g++]
- --with-ident-length=[n] Specify max length of ident [12]
- --with-quit-length=[n] Specify max length of quit [200]
- --with-topic-length=[n] Specify max length of topic [350]
- --with-kick-length=[n] Specify max length of kick [200]
- --with-gecos-length=[n] Specify max length of gecos [150]
- --with-away-length=[n] Specify max length of away [150]
- --with-max-modes=[n] Specify max modes per line which
- have parameters [20]
- --with-maxbuf=[n] Change the per message buffer size [512]
- DO NOT ALTER THIS OPTION WITHOUT GOOD REASON
- AS IT *WILL* BREAK CLIENTS!!!
- --prefix=[directory] Base directory to install into (if defined,
- can automatically define config, module, bin
- and library dirs as subdirectories of prefix)
- [$PWD]
- --config-dir=[directory] Config file directory for config and SSL certs
- [$PWD/conf]
- --module-dir=[directory] Modules directory for loadable modules
- [$PWD/modules]
- --binary-dir=[directory] Binaries directory for core binary
- [$PWD/bin]
- --library-dir=[directory] Library directory for core libraries
- [$PWD/lib]
- --help Show this help text and exit
-
-";
- exit(0);
-}
-
-1;
-
+# # Copyright 2002-2007 The ChatSpike Development Team # <brain@chatspike.net> # <Craig@chatspike.net> # # Licensed under GPL, please see the COPYING file # for more information # package make::configure; use Exporter 'import'; use POSIX; use make::utilities; @EXPORT = qw(promptnumeric dumphash is_dir getmodules getrevision getcompilerflags getlinkerflags getdependencies resolve_directory yesno showhelp promptstring_s); my $no_svn = 0; sub yesno { my ($flag,$prompt) = @_; print "$prompt [\033[1;32m$main::config{$flag}\033[0m] -> "; chomp($tmp = <STDIN>); if ($tmp eq "") { $tmp = $main::config{$flag} } if (($tmp eq "") || ($tmp =~ /^y/i)) { $main::config{$flag} = "y"; } else { $main::config{$flag} = "n"; } return; } sub resolve_directory { my $ret = $_[0]; eval { use File::Spec; $ret = File::Spec->rel2abs($_[0]); }; return $ret; } sub getrevision { if ($no_svn) { return "0"; } my $data = `svn info`; if ($data eq "") { $no_svn = 1; $rev = "0"; return $rev; } $data =~ /Revision: (\d+)/; my $rev = $1; if (!defined($rev)) { $rev = "0"; } return $rev; } sub getcompilerflags { my ($file) = @_; open(FLAGS, $file); while (<FLAGS>) { if ($_ =~ /^\/\* \$CompileFlags: (.+) \*\/$/) { close(FLAGS); return translate_functions($1,$file); } } close(FLAGS); return undef; } sub getlinkerflags { my ($file) = @_; open(FLAGS, $file); while (<FLAGS>) { if ($_ =~ /^\/\* \$LinkerFlags: (.+) \*\/$/) { close(FLAGS); return translate_functions($1,$file); } } close(FLAGS); return undef; } sub getdependencies { my ($file) = @_; open(FLAGS, $file); while (<FLAGS>) { if ($_ =~ /^\/\* \$ModDep: (.+) \*\/$/) { close(FLAGS); return translate_functions($1,$file); } } close(FLAGS); return undef; } sub getmodules { my $i = 0; print "Detecting modules "; opendir(DIRHANDLE, "src/modules"); foreach $name (sort readdir(DIRHANDLE)) { if ($name =~ /^m_(.+)\.cpp$/) { $mod = $1; if ($mod !~ /_static$/) { $main::modlist[$i++] = $mod; print "."; } } } closedir(DIRHANDLE); print "\nOk, $i modules.\n"; } sub promptnumeric($$) { my $continue = 0; my ($prompt, $configitem) = @_; while (!$continue) { print "Please enter the maximum $prompt?\n"; print "[\033[1;32m$main::config{$configitem}\033[0m] -> "; chomp($var = <STDIN>); if ($var eq "") { $var = $main::config{$configitem}; } if ($var =~ /^\d+$/) { # We don't care what the number is, set it and be on our way. $main::config{$configitem} = $var; $continue = 1; print "\n"; } else { print "You must enter a number in this field. Please try again.\n\n"; } } } sub promptstring_s($$) { my ($prompt,$default) = @_; my $var; print "$prompt\n"; print "[\033[1;32m$default\033[0m] -> "; chomp($var = <STDIN>); $var = $default if $var eq ""; print "\n"; return $var; } sub dumphash() { print "\n\033[1;32mPre-build configuration is complete!\033[0m\n\n"; print "\033[0mBase install path:\033[1;32m\t\t$main::config{BASE_DIR}\033[0m\n"; print "\033[0mConfig path:\033[1;32m\t\t\t$main::config{CONFIG_DIR}\033[0m\n"; print "\033[0mModule path:\033[1;32m\t\t\t$main::config{MODULE_DIR}\033[0m\n"; print "\033[0mLibrary path:\033[1;32m\t\t\t$main::config{LIBRARY_DIR}\033[0m\n"; print "\033[0mMax connections:\033[1;32m\t\t$main::config{MAX_CLIENT}\033[0m\n"; print "\033[0mMax nickname length:\033[1;32m\t\t$main::config{NICK_LENGT}\033[0m\n"; print "\033[0mMax channel length:\033[1;32m\t\t$main::config{CHAN_LENGT}\033[0m\n"; print "\033[0mMax mode length:\033[1;32m\t\t$main::config{MAXI_MODES}\033[0m\n"; print "\033[0mMax ident length:\033[1;32m\t\t$main::config{MAX_IDENT}\033[0m\n"; print "\033[0mMax quit length:\033[1;32m\t\t$main::config{MAX_QUIT}\033[0m\n"; print "\033[0mMax topic length:\033[1;32m\t\t$main::config{MAX_TOPIC}\033[0m\n"; print "\033[0mMax kick length:\033[1;32m\t\t$main::config{MAX_KICK}\033[0m\n"; print "\033[0mMax name length:\033[1;32m\t\t$main::config{MAX_GECOS}\033[0m\n"; print "\033[0mMax away length:\033[1;32m\t\t$main::config{MAX_AWAY}\033[0m\n"; print "\033[0mGCC Version Found:\033[1;32m\t\t$main::config{GCCVER}.x\033[0m\n"; print "\033[0mCompiler program:\033[1;32m\t\t$main::config{CC}\033[0m\n"; print "\033[0mStatic modules:\033[1;32m\t\t\t$main::config{STATIC_LINK}\033[0m\n"; print "\033[0mIPv6 Support:\033[1;32m\t\t\t$main::config{IPV6}\033[0m\n"; print "\033[0mIPv6 to IPv4 Links:\033[1;32m\t\t$main::config{SUPPORT_IP6LINKS}\033[0m\n"; print "\033[0mGnuTLS Support:\033[1;32m\t\t\t$main::config{USE_GNUTLS}\033[0m\n"; print "\033[0mOpenSSL Support:\033[1;32m\t\t$main::config{USE_OPENSSL}\033[0m\n\n"; } sub is_dir { my ($path) = @_; if (chdir($path)) { chdir($main::this); return 1; } else { # Just in case.. chdir($main::this); return 0; } } sub showhelp { chomp($PWD = `pwd`); print "Usage: configure [options] *** NOTE: NON-INTERACTIVE CONFIGURE IS *NOT* SUPPORTED BY THE *** *** INSPIRCD DEVELOPMENT TEAM. DO NOT ASK FOR HELP REGARDING *** *** NON-INTERACTIVE CONFIGURE ON THE FORUMS OR ON IRC! *** Options: [defaults in brackets after descriptions] When no options are specified, interactive configuration is started and you must specify any required values manually. If one or more options are specified, non-interactive configuration is started, and any omitted values are defaulted. Arguments with a single \"-\" symbol, as in InspIRCd 1.0.x, are also allowed. --disable-interactive Sets no options intself, but will disable any interactive prompting. --update Update makefiles and dependencies --modupdate Detect new modules and write makefiles --svnupdate {--rebuild} Update working copy via subversion {and optionally rebuild if --rebuild is also specified} --clean Remove .config.cache file and go interactive --enable-gnutls Enable GnuTLS module [no] --enable-openssl Enable OpenSSL module [no] --with-nick-length=[n] Specify max. nick length [32] --with-channel-length=[n] Specify max. channel length [64] --with-max-clients=[n] Specify maximum number of users which may connect locally --enable-optimization=[n] Optimize using -O[n] gcc flag --enable-epoll Enable epoll() where supported [set] --enable-kqueue Enable kqueue() where supported [set] --disable-epoll Do not enable epoll(), fall back to select() [not set] --disable-kqueue Do not enable kqueue(), fall back to select() [not set] --enable-ipv6 Build ipv6 native InspIRCd [no] --enable-remote-ipv6 Build with ipv6 support for remote servers on the network [yes] --disable-remote-ipv6 Do not allow remote ipv6 servers [not set] --with-cc=[filename] Use an alternative g++ binary to build InspIRCd [g++] --with-ident-length=[n] Specify max length of ident [12] --with-quit-length=[n] Specify max length of quit [200] --with-topic-length=[n] Specify max length of topic [350] --with-kick-length=[n] Specify max length of kick [200] --with-gecos-length=[n] Specify max length of gecos [150] --with-away-length=[n] Specify max length of away [150] --with-max-modes=[n] Specify max modes per line which have parameters [20] --with-maxbuf=[n] Change the per message buffer size [512] DO NOT ALTER THIS OPTION WITHOUT GOOD REASON AS IT *WILL* BREAK CLIENTS!!! --prefix=[directory] Base directory to install into (if defined, can automatically define config, module, bin and library dirs as subdirectories of prefix) [$PWD] --config-dir=[directory] Config file directory for config and SSL certs [$PWD/conf] --module-dir=[directory] Modules directory for loadable modules [$PWD/modules] --binary-dir=[directory] Binaries directory for core binary [$PWD/bin] --library-dir=[directory] Library directory for core libraries [$PWD/lib] --help Show this help text and exit "; exit(0); } 1; \ No newline at end of file
diff --git a/make/gnutlscert.pm b/make/gnutlscert.pm
index 517e08b1f..885a30603 100644
--- a/make/gnutlscert.pm
+++ b/make/gnutlscert.pm
@@ -1,115 +1 @@
-package make::gnutlscert;
-
-use Exporter 'import';
-use make::configure;
-@EXPORT = qw(make_gnutls_cert);
-
-
-sub make_gnutls_cert()
-{
- open (FH, ">certtool.template");
- my $timestr = time();
- my $org = promptstring_s("Please enter the organization name", "My IRC Network");
- my $unit = promptstring_s("Please enter the unit Name", "Server Admins");
- my $state = promptstring_s("Pleae enter your state (two letter code)", "CA");
- my $country = promptstring_s("Please enter your country", "Oompa Loompa Land");
- my $commonname = promptstring_s("Please enter the certificate common name (hostname)", "irc.mynetwork.com");
- my $email = promptstring_s("Please enter a contact email address", "oompa\@loompa.com");
- print FH <<__END__;
-# X.509 Certificate options
-#
-# DN options
-
-# The organization of the subject.
-organization = "$org"
-
-# The organizational unit of the subject.
-unit = "$unit"
-
-# The locality of the subject.
-# locality =
-
-# The state of the certificate owner.
-state = "$state"
-
-# The country of the subject. Two letter code.
-country = $country
-
-# The common name of the certificate owner.
-cn = "$commonname"
-
-# A user id of the certificate owner.
-#uid = "clauper"
-
-# If the supported DN OIDs are not adequate you can set
-# any OID here.
-# For example set the X.520 Title and the X.520 Pseudonym
-# by using OID and string pairs.
-#dn_oid = "2.5.4.12" "Dr." "2.5.4.65" "jackal"
-
-# This is deprecated and should not be used in new
-# certificates.
-# pkcs9_email = "none\@none.org"
-
-# The serial number of the certificate
-serial = $timestr
-
-# In how many days, counting from today, this certificate will expire.
-expiration_days = 700
-
-# X.509 v3 extensions
-
-# A dnsname in case of a WWW server.
-#dns_name = "www.none.org"
-
-# An IP address in case of a server.
-#ip_address = "192.168.1.1"
-
-# An email in case of a person
-email = "$email"
-
-# An URL that has CRLs (certificate revocation lists)
-# available. Needed in CA certificates.
-#crl_dist_points = "http://www.getcrl.crl/getcrl/"
-
-# Whether this is a CA certificate or not
-#ca
-
-# Whether this certificate will be used for a TLS client
-tls_www_client
-
-# Whether this certificate will be used for a TLS server
-tls_www_server
-
-# Whether this certificate will be used to sign data (needed
-# in TLS DHE ciphersuites).
-signing_key
-
-# Whether this certificate will be used to encrypt data (needed
-# in TLS RSA ciphersuites). Note that it is prefered to use different
-# keys for encryption and signing.
-encryption_key
-
-# Whether this key will be used to sign other certificates.
-cert_signing_key
-
-# Whether this key will be used to sign CRLs.
-crl_signing_key
-
-# Whether this key will be used to sign code.
-code_signing_key
-
-# Whether this key will be used to sign OCSP data.
-ocsp_signing_key
-
-# Whether this key will be used for time stamping.
-time_stamping_key
-__END__
-close(FH);
-system("certtool --generate-privkey --outfile key.pem") or return 1;
-system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem --template certtool.template") or return 1;
-unlink("certtool.template");
-}
-
-1;
-
+package make::gnutlscert; use Exporter 'import'; use make::configure; @EXPORT = qw(make_gnutls_cert); sub make_gnutls_cert() { open (FH, ">certtool.template"); my $timestr = time(); my $org = promptstring_s("Please enter the organization name", "My IRC Network"); my $unit = promptstring_s("Please enter the unit Name", "Server Admins"); my $state = promptstring_s("Pleae enter your state (two letter code)", "CA"); my $country = promptstring_s("Please enter your country", "Oompa Loompa Land"); my $commonname = promptstring_s("Please enter the certificate common name (hostname)", "irc.mynetwork.com"); my $email = promptstring_s("Please enter a contact email address", "oompa\@loompa.com"); print FH <<__END__; # X.509 Certificate options # # DN options # The organization of the subject. organization = "$org" # The organizational unit of the subject. unit = "$unit" # The locality of the subject. # locality = # The state of the certificate owner. state = "$state" # The country of the subject. Two letter code. country = $country # The common name of the certificate owner. cn = "$commonname" # A user id of the certificate owner. #uid = "clauper" # If the supported DN OIDs are not adequate you can set # any OID here. # For example set the X.520 Title and the X.520 Pseudonym # by using OID and string pairs. #dn_oid = "2.5.4.12" "Dr." "2.5.4.65" "jackal" # This is deprecated and should not be used in new # certificates. # pkcs9_email = "none\@none.org" # The serial number of the certificate serial = $timestr # In how many days, counting from today, this certificate will expire. expiration_days = 700 # X.509 v3 extensions # A dnsname in case of a WWW server. #dns_name = "www.none.org" # An IP address in case of a server. #ip_address = "192.168.1.1" # An email in case of a person email = "$email" # An URL that has CRLs (certificate revocation lists) # available. Needed in CA certificates. #crl_dist_points = "http://www.getcrl.crl/getcrl/" # Whether this is a CA certificate or not #ca # Whether this certificate will be used for a TLS client tls_www_client # Whether this certificate will be used for a TLS server tls_www_server # Whether this certificate will be used to sign data (needed # in TLS DHE ciphersuites). signing_key # Whether this certificate will be used to encrypt data (needed # in TLS RSA ciphersuites). Note that it is prefered to use different # keys for encryption and signing. encryption_key # Whether this key will be used to sign other certificates. cert_signing_key # Whether this key will be used to sign CRLs. crl_signing_key # Whether this key will be used to sign code. code_signing_key # Whether this key will be used to sign OCSP data. ocsp_signing_key # Whether this key will be used for time stamping. time_stamping_key __END__ close(FH); system("certtool --generate-privkey --outfile key.pem") or return 1; system("certtool --generate-self-signed --load-privkey key.pem --outfile cert.pem --template certtool.template") or return 1; unlink("certtool.template"); } 1; \ No newline at end of file
diff --git a/make/opensslcert.pm b/make/opensslcert.pm
index a4954e0be..cb94869f9 100644
--- a/make/opensslcert.pm
+++ b/make/opensslcert.pm
@@ -1,36 +1 @@
-package make::opensslcert;
-
-use Exporter 'import';
-use make::configure;
-@EXPORT = qw(make_openssl_cert);
-
-
-sub make_openssl_cert()
-{
- open (FH, ">openssl.template");
- my $org = promptstring_s("Please enter the organization name", "My IRC Network");
- my $unit = promptstring_s("Please enter the unit Name", "Server Admins");
- my $country = promptstring_s("Please enter your country (two letter code)", "US");
- my $state = promptstring_s("Please enter your state or locality name", "Alaska");
- my $city = promptstring_s("Please enter your city", "Factory Town");
- my $email = promptstring_s("Please enter a contact email address", "oompa\@loompa.com");
- my $commonname = promptstring_s("Please enter the common name (domain name) of the irc server", "example.inspircd.org");
- print FH <<__END__;
-$country
-$state
-$city
-$org
-$unit
-$commonname
-$email
-__END__
-close(FH);
-
-my $time = promptstring_s("Please enter the number of days that this certificate is valid for","365");
-
-system("cat openssl.template | openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem -days $time 2>/dev/null");
-system("openssl dhparam -out dhparams.pem 1024");
-unlink("openssl.template");
-}
-
-1;
+package make::opensslcert; use Exporter 'import'; use make::configure; @EXPORT = qw(make_openssl_cert); sub make_openssl_cert() { open (FH, ">openssl.template"); my $org = promptstring_s("Please enter the organization name", "My IRC Network"); my $unit = promptstring_s("Please enter the unit Name", "Server Admins"); my $country = promptstring_s("Please enter your country (two letter code)", "US"); my $state = promptstring_s("Please enter your state or locality name", "Alaska"); my $city = promptstring_s("Please enter your city", "Factory Town"); my $email = promptstring_s("Please enter a contact email address", "oompa\@loompa.com"); my $commonname = promptstring_s("Please enter the common name (domain name) of the irc server", "example.inspircd.org"); print FH <<__END__; $country $state $city $org $unit $commonname $email __END__ close(FH); my $time = promptstring_s("Please enter the number of days that this certificate is valid for","365"); system("cat openssl.template | openssl req -x509 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem -days $time 2>/dev/null"); system("openssl dhparam -out dhparams.pem 1024"); unlink("openssl.template"); } 1; \ No newline at end of file
diff --git a/make/utilities.pm b/make/utilities.pm
index c00a541b3..873797f80 100644
--- a/make/utilities.pm
+++ b/make/utilities.pm
@@ -1,383 +1 @@
-#
-# Copyright 2002-2007 The ChatSpike Development Team
-# <brain@chatspike.net>
-# <Craig@chatspike.net>
-#
-# Licensed under GPL, please see the COPYING file
-# for more information
-#
-
-package make::utilities;
-use Exporter 'import';
-use POSIX;
-use Getopt::Long;
-@EXPORT = qw(make_rpath pkgconfig_get_include_dirs pkgconfig_get_lib_dirs pkgconfig_check_version translate_functions promptstring vcheck);
-
-# Parse the output of a *_config program,
-# such as pcre_config, take out the -L
-# directive and return an rpath for it.
-
-# \033[1;32msrc/Makefile\033[0m
-
-my %already_added = ();
-
-sub promptstring($$$$$)
-{
- my ($prompt, $configitem, $default, $package, $commandlineswitch) = @_;
- my $var;
- if (!$main::interactive)
- {
- undef $opt_commandlineswitch;
- GetOptions ("$commandlineswitch=s" => \$opt_commandlineswitch);
- if (defined $opt_commandlineswitch)
- {
- print "\033[1;32m$opt_commandlineswitch\033[0m\n";
- $var = $opt_commandlineswitch;
- }
- else
- {
- die "Could not detect $package! Please specify the $prompt via the command line option \033[1;32m--$commandlineswitch=\"/path/to/file\"\033[0m";
- }
- }
- else
- {
- print "\nPlease enter the $prompt?\n";
- print "[\033[1;32m$default\033[0m] -> ";
- chomp($var = <STDIN>);
- }
- if ($var eq "")
- {
- $var = $default;
- }
- $main::config{$configitem} = $var;
-}
-
-sub make_rpath($;$)
-{
- my ($executable, $module) = @_;
- chomp($data = `$executable`);
- my $output = "";
- while ($data =~ /-L(\S+)/)
- {
- $libpath = $1;
- if (!exists $already_added{$libpath})
- {
- print "Adding extra library path to \033[1;32m$module\033[0m ... \033[1;32m$libpath\033[0m\n";
- $already_added{$libpath} = 1;
- }
- $output .= "-Wl,--rpath -Wl,$libpath -L$libpath ";
- $data =~ s/-L(\S+)//;
- }
- return $output;
-}
-
-sub extend_pkg_path()
-{
- if (!exists $ENV{PKG_CONFIG_PATH})
- {
- $ENV{PKG_CONFIG_PATH} = "/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/libdata/pkgconfig:/usr/X11R6/libdata/pkgconfig";
- }
- else
- {
- $ENV{PKG_CONFIG_PATH} .= ":/usr/local/lib/pkgconfig:/usr/local/libdata/pkgconfig:/usr/X11R6/libdata/pkgconfig";
- }
-}
-
-sub pkgconfig_get_include_dirs($$$;$)
-{
- my ($packagename, $headername, $defaults, $module) = @_;
-
- my $key = "default_includedir_$packagename";
- if (exists $main::config{$key})
- {
- print "Locating include directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... ";
- $ret = $main::config{$key};
- print "\033[1;32m$ret\033[0m (cached)\n";
- return $ret;
- }
-
- extend_pkg_path();
-
- print "Locating include directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... ";
-
- $v = `pkg-config --modversion $packagename 2>/dev/null`;
- $ret = `pkg-config --cflags $packagename 2>/dev/null`;
-
- if ((!defined $v) || ($v eq ""))
- {
- $foo = `locate "$headername" | head -n 1`;
- $foo =~ /(.+)\Q$headername\E/;
- $find = $1;
- chomp($find);
- if ((defined $find) && ($find ne "") && ($find ne $packagename))
- {
- print "(\033[1;32mFound via search\033[0m) ";
- $foo = "-I$1";
- }
- else
- {
- $foo = " ";
- undef $v;
- }
- $ret = "$foo";
- }
- if (($defaults ne "") && (($ret eq "") || (!defined $ret)))
- {
- $ret = "$foo " . $defaults;
- }
- chomp($ret);
- if ((($ret eq " ") || (!defined $ret)) && ((!defined $v) || ($v eq "")))
- {
- my $key = "default_includedir_$packagename";
- if (exists $main::config{$key})
- {
- $ret = $main::config{$key};
- }
- else
- {
- $headername =~ s/^\///;
- promptstring("path to the directory containing $headername", $key, "/usr/include",$packagename,"$packagename-includes");
- $packagename =~ tr/a-z/A-Z/;
- $main::config{$key} = "-I$main::config{$key}" . " $defaults -DVERSION_$packagename=\"$v\"";
- $main::config{$key} =~ s/^\s+//g;
- $ret = $main::config{$key};
- return $ret;
- }
- }
- else
- {
- chomp($v);
- my $key = "default_includedir_$packagename";
- $packagename =~ tr/a-z/A-Z/;
- $main::config{$key} = "$ret -DVERSION_$packagename=\"$v\"";
- $main::config{$key} =~ s/^\s+//g;
- $ret = $main::config{$key};
- print "\033[1;32m$ret\033[0m (version $v)\n";
- }
- $ret =~ s/^\s+//g;
- return $ret;
-}
-
-sub vcheck($$)
-{
- my ($version1, $version2) = @_;
- $version1 =~ s/\-r(\d+)/\.\1/g; # minor revs/patchlevels
- $version2 =~ s/\-r(\d+)/\.\1/g;
- $version1 =~ s/p(\d+)/\.\1/g;
- $version2 =~ s/p(\d+)/\.\1/g;
- $version1 =~ s/\-//g;
- $version2 =~ s/\-//g;
- $version1 =~ s/a-z//g;
- $version2 =~ s/a-z//g;
- my @v1 = split('\.', $version1);
- my @v2 = split('\.', $version2);
- for ($curr = 0; $curr < scalar(@v1); $curr++)
- {
- if ($v1[$curr] < $v2[$curr])
- {
- return 0;
- }
- }
- return 1;
-}
-
-sub pkgconfig_check_version($$;$)
-{
- my ($packagename, $version, $module) = @_;
-
- extend_pkg_path();
-
- print "Checking version of package \033[1;32m$packagename\033[0m is >= \033[1;32m$version\033[0m... ";
-
- $v = `pkg-config --modversion $packagename 2>/dev/null`;
- if (defined $v)
- {
- chomp($v);
- }
- if ((defined $v) && ($v ne ""))
- {
- if (vcheck($v,$version) == 1)
- {
- print "\033[1;32mYes (version $v)\033[0m\n";
- return 1;
- }
- else
- {
- print "\033[1;32mNo (version $v)\033[0m\n";
- return 0;
- }
- }
- # If we didnt find it, we cant definitively say its too old.
- # Return ok, and let pkgconflibs() or pkgconfincludes() pick up
- # the missing library later on.
- print "\033[1;32mNo (not found)\033[0m\n";
- return 1;
-}
-
-sub pkgconfig_get_lib_dirs($$$;$)
-{
- my ($packagename, $libname, $defaults, $module) = @_;
-
- my $key = "default_libdir_$packagename";
- if (exists $main::config{$key})
- {
- print "Locating library directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... ";
- $ret = $main::config{$key};
- print "\033[1;32m$ret\033[0m (cached)\n";
- return $ret;
- }
-
- extend_pkg_path();
-
- print "Locating library directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... ";
-
- $v = `pkg-config --modversion $packagename 2>/dev/null`;
- $ret = `pkg-config --libs $packagename 2>/dev/null`;
-
- if ((!defined $v) || ($v eq ""))
- {
- $foo = `locate "$libname" | head -n 1`;
- $foo =~ /(.+)\Q$libname\E/;
- $find = $1;
- chomp($find);
- if ((defined $find) && ($find ne "") && ($find ne $packagename))
- {
- print "(\033[1;32mFound via search\033[0m) ";
- $foo = "-L$1";
- }
- else
- {
- $foo = " ";
- undef $v;
- }
- $ret = "$foo";
- }
-
- if (($defaults ne "") && (($ret eq "") || (!defined $ret)))
- {
- $ret = "$foo " . $defaults;
- }
- chomp($ret);
- if ((($ret eq " ") || (!defined $ret)) && ((!defined $v) || ($v eq "")))
- {
- my $key = "default_libdir_$packagename";
- if (exists $main::config{$key})
- {
- $ret = $main::config{$key};
- }
- else
- {
- $libname =~ s/^\///;
- promptstring("path to the directory containing $libname", $key, "/usr/lib",$packagename,"$packagename-libs");
- $main::config{$key} = "-L$main::config{$key}" . " $defaults";
- $main::config{$key} =~ s/^\s+//g;
- $ret = $main::config{$key};
- return $ret;
- }
- }
- else
- {
- chomp($v);
- print "\033[1;32m$ret\033[0m (version $v)\n";
- my $key = "default_libdir_$packagename";
- $main::config{$key} = $ret;
- $main::config{$key} =~ s/^\s+//g;
- $ret =~ s/^\s+//g;
- }
- $ret =~ s/^\s+//g;
- return $ret;
-}
-
-# Translate a $CompileFlags etc line and parse out function calls
-# to functions within these modules at configure time.
-sub translate_functions($$)
-{
- my ($line,$module) = @_;
-
- eval
- {
- $module =~ /modules*\/(.+?)$/;
- $module = $1;
-
- # This is only a cursory check, just designed to catch casual accidental use of backticks.
- # There are pleanty of ways around it, but its not supposed to be for security, just checking
- # that people are using the new configuration api as theyre supposed to and not just using
- # backticks instead of eval(), being as eval has accountability. People wanting to get around
- # the accountability will do so anyway.
- if (($line =~ /`/) && ($line !~ /eval\(.+?`.+?\)/))
- {
- die "Developers should no longer use backticks in configuration macros. Please use exec() and eval() macros instead. Offending line: $line (In module: $module)";
- }
- while ($line =~ /exec\("(.+?)"\)/)
- {
- print "Executing program for module \033[1;32m$module\033[0m ... \033[1;32m$1\033[0m\n";
- my $replace = `$1`;
- chomp($replace);
- $line =~ s/exec\("(.+?)"\)/$replace/;
- }
- while ($line =~ /eval\("(.+?)"\)/)
- {
- print "Evaluating perl code for module \033[1;32m$module\033[0m ... ";
- my $tmpfile;
- do
- {
- $tmpfile = tmpnam();
- } until sysopen(TF, $tmpfile, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0700);
- print "(Created and executed \033[1;32m$tmpfile\033[0m)\n";
- print TF $1;
- close TF;
- my $replace = `perl $tmpfile`;
- chomp($replace);
- $line =~ s/eval\("(.+?)"\)/$replace/;
- }
- while ($line =~ /pkgconflibs\("(.+?)","(.+?)","(.+?)"\)/)
- {
- my $replace = pkgconfig_get_lib_dirs($1, $2, $3, $module);
- $line =~ s/pkgconflibs\("(.+?)","(.+?)","(.+?)"\)/$replace/;
- }
- while ($line =~ /pkgconfversion\("(.+?)","(.+?)"\)/)
- {
- if (pkgconfig_check_version($1, $2, $module) != 1)
- {
- die "Version of package $1 is too old. Please upgrade it to version \033[1;32m$2\033[0m or greater and try again.";
- }
- # This doesnt actually get replaced with anything
- $line =~ s/pkgconfversion\("(.+?)","(.+?)"\)//;
- }
- while ($line =~ /pkgconflibs\("(.+?)","(.+?)",""\)/)
- {
- my $replace = pkgconfig_get_lib_dirs($1, $2, "", $module);
- $line =~ s/pkgconflibs\("(.+?)","(.+?)",""\)/$replace/;
- }
- while ($line =~ /pkgconfincludes\("(.+?)","(.+?)",""\)/)
- {
- my $replace = pkgconfig_get_include_dirs($1, $2, "", $module);
- $line =~ s/pkgconfincludes\("(.+?)","(.+?)",""\)/$replace/;
- }
- while ($line =~ /pkgconfincludes\("(.+?)","(.+?)","(.+?)"\)/)
- {
- my $replace = pkgconfig_get_include_dirs($1, $2, $3, $module);
- $line =~ s/pkgconfincludes\("(.+?)","(.+?)","(.+?)"\)/$replace/;
- }
- while ($line =~ /rpath\("(.+?)"\)/)
- {
- my $replace = make_rpath($1,$module);
- $replace = "" if ($^O =~ /darwin/i);
- $line =~ s/rpath\("(.+?)"\)/$replace/;
- }
- };
- if ($@)
- {
- $err = $@;
- $err =~ s/at .+? line \d+.*//g;
- print "\n\nConfiguration failed. The following error occured:\n\n$err\n";
- exit;
- }
- else
- {
- return $line;
- }
-}
-
-1;
-
+# # Copyright 2002-2007 The ChatSpike Development Team # <brain@chatspike.net> # <Craig@chatspike.net> # # Licensed under GPL, please see the COPYING file # for more information # package make::utilities; use Exporter 'import'; use POSIX; use Getopt::Long; @EXPORT = qw(make_rpath pkgconfig_get_include_dirs pkgconfig_get_lib_dirs pkgconfig_check_version translate_functions promptstring vcheck); # Parse the output of a *_config program, # such as pcre_config, take out the -L # directive and return an rpath for it. # \033[1;32msrc/Makefile\033[0m my %already_added = (); sub promptstring($$$$$) { my ($prompt, $configitem, $default, $package, $commandlineswitch) = @_; my $var; if (!$main::interactive) { undef $opt_commandlineswitch; GetOptions ("$commandlineswitch=s" => \$opt_commandlineswitch); if (defined $opt_commandlineswitch) { print "\033[1;32m$opt_commandlineswitch\033[0m\n"; $var = $opt_commandlineswitch; } else { die "Could not detect $package! Please specify the $prompt via the command line option \033[1;32m--$commandlineswitch=\"/path/to/file\"\033[0m"; } } else { print "\nPlease enter the $prompt?\n"; print "[\033[1;32m$default\033[0m] -> "; chomp($var = <STDIN>); } if ($var eq "") { $var = $default; } $main::config{$configitem} = $var; } sub make_rpath($;$) { my ($executable, $module) = @_; chomp($data = `$executable`); my $output = ""; while ($data =~ /-L(\S+)/) { $libpath = $1; if (!exists $already_added{$libpath}) { print "Adding extra library path to \033[1;32m$module\033[0m ... \033[1;32m$libpath\033[0m\n"; $already_added{$libpath} = 1; } $output .= "-Wl,--rpath -Wl,$libpath -L$libpath "; $data =~ s/-L(\S+)//; } return $output; } sub extend_pkg_path() { if (!exists $ENV{PKG_CONFIG_PATH}) { $ENV{PKG_CONFIG_PATH} = "/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/libdata/pkgconfig:/usr/X11R6/libdata/pkgconfig"; } else { $ENV{PKG_CONFIG_PATH} .= ":/usr/local/lib/pkgconfig:/usr/local/libdata/pkgconfig:/usr/X11R6/libdata/pkgconfig"; } } sub pkgconfig_get_include_dirs($$$;$) { my ($packagename, $headername, $defaults, $module) = @_; my $key = "default_includedir_$packagename"; if (exists $main::config{$key}) { print "Locating include directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... "; $ret = $main::config{$key}; print "\033[1;32m$ret\033[0m (cached)\n"; return $ret; } extend_pkg_path(); print "Locating include directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... "; $v = `pkg-config --modversion $packagename 2>/dev/null`; $ret = `pkg-config --cflags $packagename 2>/dev/null`; if ((!defined $v) || ($v eq "")) { $foo = `locate "$headername" | head -n 1`; $foo =~ /(.+)\Q$headername\E/; $find = $1; chomp($find); if ((defined $find) && ($find ne "") && ($find ne $packagename)) { print "(\033[1;32mFound via search\033[0m) "; $foo = "-I$1"; } else { $foo = " "; undef $v; } $ret = "$foo"; } if (($defaults ne "") && (($ret eq "") || (!defined $ret))) { $ret = "$foo " . $defaults; } chomp($ret); if ((($ret eq " ") || (!defined $ret)) && ((!defined $v) || ($v eq ""))) { my $key = "default_includedir_$packagename"; if (exists $main::config{$key}) { $ret = $main::config{$key}; } else { $headername =~ s/^\///; promptstring("path to the directory containing $headername", $key, "/usr/include",$packagename,"$packagename-includes"); $packagename =~ tr/a-z/A-Z/; $main::config{$key} = "-I$main::config{$key}" . " $defaults -DVERSION_$packagename=\"$v\""; $main::config{$key} =~ s/^\s+//g; $ret = $main::config{$key}; return $ret; } } else { chomp($v); my $key = "default_includedir_$packagename"; $packagename =~ tr/a-z/A-Z/; $main::config{$key} = "$ret -DVERSION_$packagename=\"$v\""; $main::config{$key} =~ s/^\s+//g; $ret = $main::config{$key}; print "\033[1;32m$ret\033[0m (version $v)\n"; } $ret =~ s/^\s+//g; return $ret; } sub vcheck($$) { my ($version1, $version2) = @_; $version1 =~ s/\-r(\d+)/\.\1/g; # minor revs/patchlevels $version2 =~ s/\-r(\d+)/\.\1/g; $version1 =~ s/p(\d+)/\.\1/g; $version2 =~ s/p(\d+)/\.\1/g; $version1 =~ s/\-//g; $version2 =~ s/\-//g; $version1 =~ s/a-z//g; $version2 =~ s/a-z//g; my @v1 = split('\.', $version1); my @v2 = split('\.', $version2); for ($curr = 0; $curr < scalar(@v1); $curr++) { if ($v1[$curr] < $v2[$curr]) { return 0; } } return 1; } sub pkgconfig_check_version($$;$) { my ($packagename, $version, $module) = @_; extend_pkg_path(); print "Checking version of package \033[1;32m$packagename\033[0m is >= \033[1;32m$version\033[0m... "; $v = `pkg-config --modversion $packagename 2>/dev/null`; if (defined $v) { chomp($v); } if ((defined $v) && ($v ne "")) { if (vcheck($v,$version) == 1) { print "\033[1;32mYes (version $v)\033[0m\n"; return 1; } else { print "\033[1;32mNo (version $v)\033[0m\n"; return 0; } } # If we didnt find it, we cant definitively say its too old. # Return ok, and let pkgconflibs() or pkgconfincludes() pick up # the missing library later on. print "\033[1;32mNo (not found)\033[0m\n"; return 1; } sub pkgconfig_get_lib_dirs($$$;$) { my ($packagename, $libname, $defaults, $module) = @_; my $key = "default_libdir_$packagename"; if (exists $main::config{$key}) { print "Locating library directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... "; $ret = $main::config{$key}; print "\033[1;32m$ret\033[0m (cached)\n"; return $ret; } extend_pkg_path(); print "Locating library directory for package \033[1;32m$packagename\033[0m for module \033[1;32m$module\033[0m... "; $v = `pkg-config --modversion $packagename 2>/dev/null`; $ret = `pkg-config --libs $packagename 2>/dev/null`; if ((!defined $v) || ($v eq "")) { $foo = `locate "$libname" | head -n 1`; $foo =~ /(.+)\Q$libname\E/; $find = $1; chomp($find); if ((defined $find) && ($find ne "") && ($find ne $packagename)) { print "(\033[1;32mFound via search\033[0m) "; $foo = "-L$1"; } else { $foo = " "; undef $v; } $ret = "$foo"; } if (($defaults ne "") && (($ret eq "") || (!defined $ret))) { $ret = "$foo " . $defaults; } chomp($ret); if ((($ret eq " ") || (!defined $ret)) && ((!defined $v) || ($v eq ""))) { my $key = "default_libdir_$packagename"; if (exists $main::config{$key}) { $ret = $main::config{$key}; } else { $libname =~ s/^\///; promptstring("path to the directory containing $libname", $key, "/usr/lib",$packagename,"$packagename-libs"); $main::config{$key} = "-L$main::config{$key}" . " $defaults"; $main::config{$key} =~ s/^\s+//g; $ret = $main::config{$key}; return $ret; } } else { chomp($v); print "\033[1;32m$ret\033[0m (version $v)\n"; my $key = "default_libdir_$packagename"; $main::config{$key} = $ret; $main::config{$key} =~ s/^\s+//g; $ret =~ s/^\s+//g; } $ret =~ s/^\s+//g; return $ret; } # Translate a $CompileFlags etc line and parse out function calls # to functions within these modules at configure time. sub translate_functions($$) { my ($line,$module) = @_; eval { $module =~ /modules*\/(.+?)$/; $module = $1; # This is only a cursory check, just designed to catch casual accidental use of backticks. # There are pleanty of ways around it, but its not supposed to be for security, just checking # that people are using the new configuration api as theyre supposed to and not just using # backticks instead of eval(), being as eval has accountability. People wanting to get around # the accountability will do so anyway. if (($line =~ /`/) && ($line !~ /eval\(.+?`.+?\)/)) { die "Developers should no longer use backticks in configuration macros. Please use exec() and eval() macros instead. Offending line: $line (In module: $module)"; } while ($line =~ /exec\("(.+?)"\)/) { print "Executing program for module \033[1;32m$module\033[0m ... \033[1;32m$1\033[0m\n"; my $replace = `$1`; chomp($replace); $line =~ s/exec\("(.+?)"\)/$replace/; } while ($line =~ /eval\("(.+?)"\)/) { print "Evaluating perl code for module \033[1;32m$module\033[0m ... "; my $tmpfile; do { $tmpfile = tmpnam(); } until sysopen(TF, $tmpfile, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0700); print "(Created and executed \033[1;32m$tmpfile\033[0m)\n"; print TF $1; close TF; my $replace = `perl $tmpfile`; chomp($replace); $line =~ s/eval\("(.+?)"\)/$replace/; } while ($line =~ /pkgconflibs\("(.+?)","(.+?)","(.+?)"\)/) { my $replace = pkgconfig_get_lib_dirs($1, $2, $3, $module); $line =~ s/pkgconflibs\("(.+?)","(.+?)","(.+?)"\)/$replace/; } while ($line =~ /pkgconfversion\("(.+?)","(.+?)"\)/) { if (pkgconfig_check_version($1, $2, $module) != 1) { die "Version of package $1 is too old. Please upgrade it to version \033[1;32m$2\033[0m or greater and try again."; } # This doesnt actually get replaced with anything $line =~ s/pkgconfversion\("(.+?)","(.+?)"\)//; } while ($line =~ /pkgconflibs\("(.+?)","(.+?)",""\)/) { my $replace = pkgconfig_get_lib_dirs($1, $2, "", $module); $line =~ s/pkgconflibs\("(.+?)","(.+?)",""\)/$replace/; } while ($line =~ /pkgconfincludes\("(.+?)","(.+?)",""\)/) { my $replace = pkgconfig_get_include_dirs($1, $2, "", $module); $line =~ s/pkgconfincludes\("(.+?)","(.+?)",""\)/$replace/; } while ($line =~ /pkgconfincludes\("(.+?)","(.+?)","(.+?)"\)/) { my $replace = pkgconfig_get_include_dirs($1, $2, $3, $module); $line =~ s/pkgconfincludes\("(.+?)","(.+?)","(.+?)"\)/$replace/; } while ($line =~ /rpath\("(.+?)"\)/) { my $replace = make_rpath($1,$module); $replace = "" if ($^O =~ /darwin/i); $line =~ s/rpath\("(.+?)"\)/$replace/; } }; if ($@) { $err = $@; $err =~ s/at .+? line \d+.*//g; print "\n\nConfiguration failed. The following error occured:\n\n$err\n"; exit; } else { return $line; } } 1; \ No newline at end of file