- Makefile.PL now builds imconfig.h with #defines for libraries
authorTony Cook <tony@develop=help.com>
Thu, 6 Jan 2005 09:43:43 +0000 (09:43 +0000)
committerTony Cook <tony@develop=help.com>
Thu, 6 Jan 2005 09:43:43 +0000 (09:43 +0000)
  present (and for the GIF library version) rather than putting them
  into CFLAGS

.cvsignore
Changes
Makefile.PL
image.h
log.c

index 4be0832..ea87bc7 100644 (file)
@@ -6,3 +6,4 @@ Imager.c
 pm_to_blib
 Imager.bs
 t1lib.log
+imconfig.h
diff --git a/Changes b/Changes
index 54ffffe..f1bf40a 100644 (file)
--- a/Changes
+++ b/Changes
@@ -990,6 +990,9 @@ Revision history for Perl extension Imager.
   and pkg-config to configure libpng.
 - avoid complaining about include/lib directories we pull from 
   perl's config or we have built-in
+- Makefile.PL now builds imconfig.h with #defines for libraries
+  present (and for the GIF library version) rather than putting them
+  into CFLAGS
 
 =================================================================
 
index 5cb36cc..a3e0804 100644 (file)
@@ -26,6 +26,8 @@ getenv();     # get environment variables
 init();       # initialize global data
 pathcheck();  # Check if directories exist
 
+my @defines;
+
 # Pick what libraries are used
 if ($MANUAL) {
   manual();
@@ -43,8 +45,9 @@ if ($MANUAL) {
 gifcheck();
 
 my $lib_cflags = '';
-for $frm(values %formats) {
-  $F_DEFINE .= ' -D'.$frm->{def};
+for my $frmkey (keys %formats) {
+  my $frm = $formats{$frmkey};
+  push @defines, [ $frm->{def}, 1, "$frmkey available" ];
   $F_LIBS   .= ' '  .$frm->{libfiles};
   $F_OBJECT .= ' '  .$frm->{objfiles};
   $lib_cflags   .= ' '  .$frm->{cflags} if $frm->{cflags};
@@ -71,7 +74,7 @@ if (defined $Config{'d_dlsymun'}) { $OSDEF  .= ' -DDLSYMUN'; }
        'NAME'         => 'Imager',
        'VERSION_FROM' => 'Imager.pm',
        'LIBS'         => "$LFLAGS -lm $OSLIBS $F_LIBS",
-       'DEFINE'       => "$F_DEFINE $EXTDEF $OSDEF $CFLAGS",
+       'DEFINE'       => "$OSDEF $CFLAGS",
        'INC'          => "$lib_cflags $DFLAGS $F_INC",
        'OBJECT'       => join(' ', @objs, $F_OBJECT),
        clean          => { FILES=>'testout' },
@@ -85,6 +88,8 @@ if ($ExtUtils::MakeMaker::VERSION > 6.10) {
   $opts{NO_META} = 1;
 }
 
+make_imconfig(\@defines);
+
 if ($VERBOSE) { print Dumper(\%opts); }
 mkdir('testout',0777); # since we cannot include it in the archive.
 WriteMakefile(%opts);
@@ -99,6 +104,11 @@ dyntest.$(MYEXTLIB) : dynfilt/Makefile
 
 lib/Imager/Regops.pm : regmach.h regops.perl
        $(PERL) regops.perl regmach.h lib/Imager/Regops.pm
+
+imconfig.h: Makefile.PL
+       $(ECHO) "imconfig.h out-of-date with respect to $?"
+       $(PERLRUN) Makefile.PL
+       $(ECHO) "==> Your Makefile has been rebuilt - re-run your make command <=="
 ';
 }
 
@@ -198,7 +208,8 @@ EOFF
 
   # we need the version in a #ifdefable form
 
-  $F_DEFINE .= "-DIM_GIFMAJOR=$major -DIM_GIFMINOR=$minor";
+  push @defines, [ IM_GIFMAJOR, $major, "Parsed giflib version" ];
+  push @defines, [ IM_GIFMINOR, $minor ];
 }
 
 
@@ -469,15 +480,39 @@ sub getenv {
   if ($VERBOSE) { print "Verbose mode\n"; require Data::Dumper; import Data::Dumper qw(Dumper);}
 
   if ($NOLOG)   { print "Logging not compiled into module\n"; }
-  else { $EXTDEF.=' -DIMAGER_LOG'; }
+  else { 
+    push @defines, [ IMAGER_LOG => 1, "Logging system" ];
+  }
 
   if ($DEBUG_MALLOC) {
-    $EXTDEF.=' -DIMAGER_DEBUG_MALLOC';
+    push @defines, [ IMAGER_DEBUG_MALLOC => 1, "Use Imager's DEBUG malloc()" ];
     print "Malloc debugging enabled\n";
   }
 
 }
 
+sub make_imconfig {
+  my ($defines) = @_;
+
+  open CONFIG, "> imconfig.h"
+    or die "Cannot create imconfig.h: $!\n";
+  print CONFIG <<EOS;
+/* This file is automatically generated by Makefile.PL.
+   Don't edit this file, since any changes will be lost */
+
+#ifndef IMAGER_IMCONFIG_H
+#define IMAGER_IMCONFIG_H
+EOS
+  for my $define (@$defines) {
+    if ($define->[2]) {
+      print CONFIG "\n/*\n  $define->[2]\n*/\n\n";
+    }
+    print CONFIG "#define $define->[0] $define->[1]\n";
+  }
+  print CONFIG "\n#endif\n";
+  close CONFIG;
+}
+
 # probes for freetype2 by trying to run freetype-config
 sub freetype2_probe {
   my ($frm, $frmkey) = @_;
diff --git a/image.h b/image.h
index 5278c09..52f5071 100644 (file)
--- a/image.h
+++ b/image.h
@@ -1,6 +1,7 @@
 #ifndef _IMAGE_H_
 #define _IMAGE_H_
 
+#include "imconfig.h"
 #include "imio.h"
 #include "iolayer.h"
 #include "log.h"
diff --git a/log.c b/log.c
index 04e225a..c2b23e6 100644 (file)
--- a/log.c
+++ b/log.c
@@ -1,3 +1,4 @@
+#include "imconfig.h"
 #include "log.h"
 
 #define DTBUFF 50