1 # 2 # Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. 3 # 4 5 # 6 # Makefile.PL for ::Exacct::Object 7 # 8 9 # See ../Makefile.PL for an explanation of the linker flag manipulations. 10 11 require 5.8.4; 12 use strict; 13 use warnings; 14 use ExtUtils::MakeMaker; 15 16 # 17 # Some later versions of ExtUtils::MakeMaker are broken, 18 # and complain about function redefinitions in the child Makefile.PLs. 19 # Stop the warnings. 20 # 21 no warnings qw(redefine); 22 23 our (@defines, @man3pods); 24 25 # 26 # MakeMaker overrides. 27 # 28 package MY; 29 no warnings qw(once); 30 31 # 32 # Overrides that are common to both the ON and non-ON build environments. 33 # 34 35 # 36 # Suppress the setting of LD_RUN_PATH, as it isn't necessary. 37 # 38 39 sub const_loadlibs 40 { 41 my $self = shift(@_); 42 delete($self->{LD_RUN_PATH}); 43 return($self->SUPER::const_loadlibs(@_)); 44 } 45 46 sub dynamic_lib 47 { 48 my $self = shift(@_); 49 my $txt = $self->SUPER::dynamic_lib(@_); 50 $txt =~ s/LD_RUN_PATH=\S*\s*//; 51 return($txt); 52 } 53 54 # 55 # ON-specific overrides. 56 # 57 if (exists($ENV{CODEMGR_WS}) && exists($ENV{ENVCPPFLAGS1})) { 58 # 59 # Override postamble and replace it with one that explicitly records 60 # the dependency between Object.c (generated from Object.xs by xsubpp) 61 # and the ObjectDefs.xi file (generated from sys/exacct.h by 62 # extract_defines). Note we have to mimic the -I processing done by cc 63 # to find the correct version of the file, as we want the copy from the 64 # proto area rather than /usr/include. This ensures that the constant 65 # values exported by the perl module stay up-to date with the 66 # corresponding #defines. 67 # 68 *postamble = sub { 69 return <<'EOF'; 70 EXACCT_H:sh= \ 71 for dir in $ENVCPPFLAGS1 $ENVCPPFLAGS2 $ENVCPPFLAGS3 $ENVCPPFLAGS4 \ 72 /usr/include; do \ 73 dir=`expr $dir : '^-I\(.*\)$' \| $dir`; \ 74 file="$dir/sys/exacct.h"; \ 75 test -f $file && echo $file && break; \ 76 done; 77 78 Object.c: ObjectDefs.xi 79 80 ObjectDefs.xi: ../extract_defines $(EXACCT_H) 81 $(PERL) ../extract_defines Object $@ $(EXACCT_H) 82 EOF 83 }; 84 85 # Enable/disable debugging as required. 86 @main::defines = ( DEFINE => '-DEXACCT_DEBUG' ) 87 if (! exists($ENV{RELEASE_BUILD})); 88 89 # Don't install POD pages for ON. 90 @main::man3pods = ( MAN3PODS => {} ); 91 92 # 93 # Non-ON overrides. 94 # 95 } else { 96 # 97 # Override postamble and replace it with one that explicitly records 98 # the dependency between Object.c (generated from Object.xs by xsubpp) 99 # and the ObjectDefs.xi file (generated from /usr/include/sys/exacct.h 100 # by # extract_defines). This ensures # that the constant values 101 # exported by the perl module stay up-to date with the corresponding 102 # #defines. 103 # 104 *postamble = sub { 105 return <<'EOF'; 106 EXACCT_H = /usr/include/sys/exacct.h 107 108 Object.c: ObjectDefs.xi 109 110 ObjectDefs.xi: ../extract_defines $(EXACCT_H) 111 $(PERL) ../extract_defines Object $@ $(EXACCT_H) 112 EOF 113 }; 114 115 # Install the POD documentation for non-ON builds. 116 my $man3pfx = '$(INST_MAN3DIR)/Sun::Solaris::Exacct'; 117 @main::man3pods = ( MAN3PODS => { 118 '../pod/Object.pod' => $man3pfx . '::Object.$(MAN3EXT)', 119 '../pod/Item.pod' => $man3pfx . '::Object::Item.$(MAN3EXT)', 120 '../pod/Group.pod' => $man3pfx . '::Object::Group.$(MAN3EXT)' 121 }); 122 } 123 124 # 125 # Having set everything up, write the Makefile. 126 # 127 package main; 128 129 WriteMakefile( 130 NAME => 'Sun::Solaris::Exacct::Object', 131 VERSION_FROM => 'Object.pm', 132 H => [ '../exacct_common.xh' ], 133 TYPEMAPS => [ '../typemap' ], 134 @defines, 135 @man3pods, 136 dynamic_lib => { OTHERLDFLAGS => 137 '-h $(DLBASE).$(DLEXT) ' . 138 '-R\$$ORIGIN/.. $(INST_ARCHAUTODIR)/../Exacct.so' 139 }, 140 realclean => { FILES => 'ObjectDefs.xi' }, 141 );