summaryrefslogtreecommitdiff
path: root/inc/MMHelper.pm
diff options
context:
space:
mode:
Diffstat (limited to 'inc/MMHelper.pm')
-rw-r--r--inc/MMHelper.pm79
1 files changed, 79 insertions, 0 deletions
diff --git a/inc/MMHelper.pm b/inc/MMHelper.pm
new file mode 100644
index 0000000..7e340b9
--- /dev/null
+++ b/inc/MMHelper.pm
@@ -0,0 +1,79 @@
+package MMHelper;
+
+use strict;
+use warnings;
+
+use Config;
+
+sub ccflags_dyn {
+ my $is_dev = shift;
+
+ my $ccflags = q<( $Config::Config{ccflags} || '' ) . ' -I.'>;
+ if ($is_dev and ($Config{cc} !~ /^cl\b/i)) {
+ $ccflags .= q< . ' -Wall -Wdeclaration-after-statement'>;
+ }
+
+ return $ccflags;
+}
+
+sub ccflags_static {
+ my $is_dev = shift;
+
+ return eval(ccflags_dyn($is_dev));
+}
+
+sub mm_args {
+ my ( @object, %xs );
+
+ for my $xs ( glob "xs/*.xs" ) {
+ ( my $c = $xs ) =~ s/\.xs$/.c/i;
+ ( my $o = $xs ) =~ s/\.xs$/\$(OBJ_EXT)/i;
+
+ $xs{$xs} = $c;
+ push @object, $o;
+ }
+
+ for my $c ( glob "*.c" ) {
+ ( my $o = $c ) =~ s/\.c$/\$(OBJ_EXT)/i;
+ push @object, $o;
+ }
+
+ return (
+ clean => { FILES => join( q{ }, @object ) },
+ OBJECT => join( q{ }, @object ),
+ XS => \%xs,
+ );
+}
+
+sub my_package_subs {
+ return <<'EOP';
+{
+package MY;
+
+use Config;
+
+sub const_cccmd {
+ my $ret = shift->SUPER::const_cccmd(@_);
+ return q{} unless $ret;
+
+ if ($Config{cc} =~ /^cl\b/i) {
+ warn 'you are using MSVC... we may not have gotten some options quite right.';
+ $ret .= ' /Fo$@';
+ }
+ else {
+ $ret .= ' -o $@';
+ }
+
+ return $ret;
+}
+
+sub postamble {
+ return <<'EOF';
+$(OBJECT) : mop.h
+EOF
+}
+}
+EOP
+}
+
+1;