summaryrefslogtreecommitdiff
path: root/make
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2013-05-04 16:40:27 +0100
committerPeter Powell <petpow@saberuk.com>2013-05-16 14:34:07 +0100
commita9ca786a6a875d38f54f50b7c23ea1ad5d247511 (patch)
tree4f070bff61ca924bb10291a84cd41661f2aff4af /make
parent712a0e5ff36e5ba052c5d1accf5f5943be4a6e8a (diff)
Improve feature detection in configure.
Diffstat (limited to 'make')
-rw-r--r--make/configure.pm21
-rw-r--r--make/test/clock_gettime.cpp25
-rw-r--r--make/test/eventfd.cpp (renamed from make/check_eventfd.cpp)0
-rw-r--r--make/test/kqueue.cpp (renamed from make/check_epoll.cpp)4
4 files changed, 47 insertions, 3 deletions
diff --git a/make/configure.pm b/make/configure.pm
index 606483e98..67e91c825 100644
--- a/make/configure.pm
+++ b/make/configure.pm
@@ -31,10 +31,29 @@ use warnings FATAL => qw(all);
use Exporter 'import';
use POSIX;
use make::utilities;
-our @EXPORT = qw(promptnumeric dumphash is_dir getmodules getrevision getcompilerflags getlinkerflags getdependencies nopedantic resolve_directory yesno showhelp promptstring_s module_installed);
+our @EXPORT = qw(test_file test_header promptnumeric dumphash is_dir getmodules getrevision getcompilerflags getlinkerflags getdependencies nopedantic resolve_directory yesno showhelp promptstring_s module_installed);
my $no_git = 0;
+sub test_file($$;$) {
+ my ($cc, $file, $args) = @_;
+ my $status = 0;
+ $args ||= '';
+ $status ||= system "$cc -o __test_$file make/test/$file $args >/dev/null 2>&1";
+ $status ||= system "./__test_$file >/dev/null 2>&1";
+ unlink "./__test_$file";
+ return !$status;
+}
+
+sub test_header($$;$) {
+ my ($cc, $header, $args) = @_;
+ $args ||= '';
+ open(CC, "| $cc -E - $args >/dev/null 2>&1") or return 0;
+ print CC "#include <$header>";
+ close(CC);
+ return !$?;
+}
+
sub yesno {
my ($flag,$prompt) = @_;
print "$prompt [\e[1;32m$main::config{$flag}\e[0m] -> ";
diff --git a/make/test/clock_gettime.cpp b/make/test/clock_gettime.cpp
new file mode 100644
index 000000000..91d8cd412
--- /dev/null
+++ b/make/test/clock_gettime.cpp
@@ -0,0 +1,25 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ *
+ * This file is part of InspIRCd. InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <time.h>
+
+int main() {
+ timespec time_spec;
+ clock_gettime(CLOCK_REALTIME, &time_spec);
+ return 0;
+}
diff --git a/make/check_eventfd.cpp b/make/test/eventfd.cpp
index 980d04485..980d04485 100644
--- a/make/check_eventfd.cpp
+++ b/make/test/eventfd.cpp
diff --git a/make/check_epoll.cpp b/make/test/kqueue.cpp
index 918d3907e..a20317456 100644
--- a/make/check_epoll.cpp
+++ b/make/test/kqueue.cpp
@@ -16,9 +16,9 @@
*/
-#include <sys/epoll.h>
+#include <sys/event.h>
int main() {
- int fd = epoll_create(1);
+ int fd = kqueue();
return (fd < 0);
}