1 #!/usr/local/bin/perl -w
7 # Be kind to testers, not verbose
8 if (exists $ENV{AUTOMATED_TESTING} and $ENV{AUTOMATED_TESTING}) {
9 exists $ENV{UNIFY} or exit 0;
12 use Cwd qw( cwd abs_path );
14 use ExtUtils::MakeMaker;
20 print "\nConfiguring DBD::Unify ...\n\n";
22 $^O =~ m/^(?: VMS | MsWin32 | cygwin )$/x and
23 die "No support for OS $^O (yet)\n";
25 use vars qw($UNIFY $UNITOP $ULIBS $ULDOPTS);
31 DISTNAME => "DBD-Unify",
32 VERSION_FROM => "lib/DBD/Unify.pm",
33 AUTHOR => "H.Merijn Brand <h.m.brand\@xs4all.nl>",
34 ABSTRACT_FROM => "lib/DBD/Unify.pm",
36 PREREQ_PM => { # CORE stuff
52 dist => { COMPRESS => "gzip -9f",
56 clean => { FILES => "dbdimp.c dbdimp.ec Unify.ec",
58 realclean => { FILES => "Unify.xsi ulib",
61 LINKTYPE => "dynamic",
62 INC => "-I$UNITOP -I$UNITOP/include -I\$(DBI_INSTARCH_DIR)",
63 OBJECT => "Unify\$(OBJ_EXT) dbdimp\$(OBJ_EXT)",
65 depend => { "dbdimp\$(OBJ_EXT)" => "dbdimp.c Unify.h",
66 "Unify\$(OBJ_EXT)" => "Unify.h",
69 dynamic_lib => { OTHERLDFLAGS => " $ULIBS \$(COMPOBJS) " .
74 }->{$^O}||"") . $ULDOPTS,
76 macro => { EPP => "$UNITOP/bin/EPP",
78 CC => ($^O eq "aix" ? "env UPPNAME='cc -E' " : "")
80 SELINUXENABLED => "/usr/sbin/selinuxenabled",
83 my $eummv = eval $ExtUtils::MakeMaker::VERSION;
84 $eummv > 6.30 and $wm{LICENSE} = "perl";
85 $Config{myarchname} eq "ia64-hpux" and delete $wm{macro}{CC};
87 my $rv = WriteMakefile (%wm);
89 if ($rv && <ulib/*.s[lo] >) {
90 open my $mf, "<Makefile" or die "Cannot read Makefile: $!\n";
93 s/\bPERL_DL_NONLAZY=\d+\s+// for @MF;
94 open $mf, ">Makefile" or die "Cannot modify Makefile: $!\n";
101 unless (exists $ENV{UNIFY}) {
103 "\$UNIFY not set. This probably means that you either do not have\n",
104 "Unify products installed on your system, or you did not set up a\n",
105 "minimal runtime environment to make it work.\n";
108 unless (exists $ENV{DBPATH}) {
110 "\$DBPATH not set. Even if your UNIFY environment might be set up\n",
111 "correctly, building and testing will need an available database.\n";
115 $UNIFY = abs_path $ENV{UNIFY};
117 -d $UNIFY or die "\$UNIFY is not a valid directory\n";
118 -d $ENV{DBPATH} or die "\$DBPATH is not a valid directory\n";
120 $UNITOP = abs_path "$UNIFY/..";
123 my @sqlv = `SQL -version`;
126 symlink $UNIFY, "./ulib";
127 # Checked for A/SQL DS 6.3 AB and beyond
128 my @ulibs = grep { -f "ulib/$_" } qw(
132 U2000c.a U2000u.a U2000k.a
134 S2000u.a S2000c.a U2000r.a
135 libnwrpc.a libnwstcp.a
138 my $localremote = prompt (
139 "Link (L)ocal-only, (R)emote-only, or (B)oth? [L/r/b] >", "L");
140 if ($localremote =~ m/^\s*[Rr]/) {
141 @ulibs = map { s/([0s]u)\.a/$1r.a/; $_ } @ulibs;
143 elsif ($localremote =~ m/^\s*[Bb]/) {
146 else { # Local-only is (fastest) default
147 @ulibs = map { s/([0s]u)\.a/$1l.a/; $_ } @ulibs;
149 $ULDOPTS = -f "ulib/libgcc.a" ? " -lgcc" : "";
151 my ($rev) = ("@sqlv" =~ m/Revision:\s+(\d[.\d]*)/);
152 my $dlext = $Config{dlext} || "sl";
153 my $try_shared = $^O eq "hpux" && $rev >= 8.2 ? 1 : 0;
155 if (<ulib/*.$dlext >) {
156 my $answer = prompt ("Build a shared lib version? [Y/n] >", "Y");
157 $answer =~ m/^\s*[Qq]/ and exit;
158 $answer =~ m/^\s*[NnFf]/ and $try_shared = 0;
161 my $answer = prompt (
162 "Building for rev $rev on HP-UX would support Shared Libraries\n".
163 " but I don't see them (yet) in your \$UNIFY.\n".
164 "Shall I try to use Shared Objects? [Y/n] >", "Y");
165 $answer =~ m/^\s*[Qq]/ and exit;
166 if ($answer =~ m/^\s*[NnFf]/) {
170 chdir $UNIFY or die "Cannot chdir to $UNIFY: $!\n";
171 foreach my $a (<*.a >) {
172 $a eq "ACLMAIN.a" || $a eq "libgcc.a" and next;
173 (my $sl = "lib$a") =~ s/\.a$/.$dlext/o;
174 $sl =~ s/^liblib/lib/;
175 -f $sl and next; # Already done;
176 mkdir "_a_SL" or die "Cannot create temp dir for conversion: $!";
177 chdir "_a_SL" or die "Cannot chdir to temp dir: $!";
178 print STDERR " Converting $a ...\n";
180 system "ld -b +s -o ../$sl *.o";
193 <ulib/*.s[lo] > or $try_shared = 0;
197 $ULIBS = join " -l" => "-L$UNIFY", @ulibs;
200 $ULIBS = join " ulib/" => "", @ulibs;
204 # --- Check development environment
209 -r "$UNITOP/$f" && -s _ && (-x _ || $f !~ m/^bin/) and return;
210 die "I can't find $f\n".
211 "Is your Unify ($UNITOP) set up correctly??\n";
216 Check ("lib/lib${_}.$dlext") for @ulibs;
219 Check ($_) for split m/ u/ => $ULIBS;
223 print "System: perl$] $^O\n",
238 DBI::DBD::dbd_postamble (),
240 'dbdimp.c: dbdimp.ec Unify.h',
241 ' $(EPP) $(EPPOPT) dbdimp.ec ',
243 'dbdimp.ec: dbdimp.ic',
244 ' $(PERL) ic2ec dbdimp.ic > dbdimp.ec',
246 'installu uinstall: all',
247 ' $(PERL) installu.pl',
254 ' pod-spell-check --aspell',
256 'checkmeta: spellcheck',
257 ' perl sandbox/genPPPort_h.pl',
258 ' perl sandbox/genMETA.pl -c',
261 ' perl sandbox/genMETA.pl',
264 'tgzdist: checkmeta fixmeta $(DISTVNAME).tar.gz distcheck',
265 ' -@mv -f $(DISTVNAME).tar.gz $(DISTVNAME).tgz',
266 ' -@cpants_lint.pl $(DISTVNAME).tgz',
267 ' -@rm -f Debian_CPANTS.txt',
270 ' if [ -x $(SELINUXENABLED) ] && $(SELINUXENABLED); then chcon -t textrel_shlib_t $(INST_ARCHLIB)/auto/$(FULLEXT)/$(DLBASE).so; fi',
273 ' if [ -x $(SELINUXENABLED) ] && $(SELINUXENABLED); then chcon -t textrel_shlib_t $(INSTALLSITEARCH)/auto/$(FULLEXT)/$(DLBASE).so; fi',
279 my ($self, $path) = @_;
280 ($path =~ m/\~$/) ? undef : $path;