I've been building an automated build framework for my UpLib system,
which requires PIL.  I've made a couple of changes to the PIL setup.py
which might go into the standard release, and attach a patch.

Basically two changes:

1.  It's useful to be able to set TIFF_ROOT, JPEG_ROOT, etc. without
editing the setup.py file.  This patch modifies the default values for
those setup variables to be read from the environment, as PIL_TIFF_ROOT,
PIL_JPEG_ROOT, etc.  This allows a build script to just set the
environment variables to pass them in to setup.py.

2.  When linking _imagingft on msys, the auxiliary libraries (-ljpeg,
-lz, etc.) need to be passed as arguments to the link command.  So I've
modified the link code

        if feature.freetype:
            defs = []
            if feature.freetype_version == 20:
                defs.append(("USE_FREETYPE_2_0", None))
            exts.append(Extension(
                "_imagingft", ["_imagingft.c"], libraries=["freetype"],
                define_macros=defs
                ))

to read instead

        if feature.freetype:
            defs = []
            if feature.freetype_version == 20:
                defs.append(("USE_FREETYPE_2_0", None))
            exts.append(Extension(
                "_imagingft", ["_imagingft.c"], libraries=["freetype"] + libs,
                define_macros=defs
                ))

adding back in the necessary libraries.  Similarly for _imagingtiff and
_imagingcms.

Should this perhaps be done only for msys, via an "extra" parameter,
such as that used with _imagingcms?  Be happy to change it, but it seems
to work fine on OS X and Ubuntu, too, as is.

Bill

*** setup.py	2009-11-15 08:06:10.000000000 -0800
--- setup.py	2010-04-01 14:26:12.000000000 -0700
***************
*** 15,21 ****
  
  def libinclude(root):
      # map root to (root/lib, root/include)
!     return os.path.join(root, "lib"), os.path.join(root, "include")
  
  # --------------------------------------------------------------------
  # Library pointers.
--- 15,24 ----
  
  def libinclude(root):
      # map root to (root/lib, root/include)
!     if not root:
!         return None
!     else:
!         return os.path.join(root, "lib"), os.path.join(root, "include")
  
  # --------------------------------------------------------------------
  # Library pointers.
***************
*** 33,44 ****
  #
  # TIFF_ROOT = libinclude("/opt/tiff")
  
! TCL_ROOT = None
! JPEG_ROOT = None
! ZLIB_ROOT = None
! TIFF_ROOT = None
! FREETYPE_ROOT = None
! LCMS_ROOT = None
  
  # FIXME: add mechanism to explicitly *disable* the use of a library
  
--- 36,47 ----
  #
  # TIFF_ROOT = libinclude("/opt/tiff")
  
! TCL_ROOT = libinclude(os.environ.get("PIL_TCL_ROOT"))
! JPEG_ROOT = libinclude(os.environ.get("PIL_JPEG_ROOT"))
! ZLIB_ROOT = libinclude(os.environ.get("PIL_ZLIB_ROOT"))
! TIFF_ROOT = libinclude(os.environ.get("PIL_TIFF_ROOT"))
! FREETYPE_ROOT = libinclude(os.environ.get("PIL_FREETYPE_ROOT"))
! LCMS_ROOT = libinclude(os.environ.get("PIL_LCMS_ROOT"))
  
  # FIXME: add mechanism to explicitly *disable* the use of a library
  
***************
*** 314,326 ****
              if feature.freetype_version == 20:
                  defs.append(("USE_FREETYPE_2_0", None))
              exts.append(Extension(
!                 "_imagingft", ["_imagingft.c"], libraries=["freetype"],
                  define_macros=defs
                  ))
  
          if os.path.isfile("_imagingtiff.c") and feature.tiff:
              exts.append(Extension(
!                 "_imagingtiff", ["_imagingtiff.c"], libraries=["tiff"]
                  ))
  
          if os.path.isfile("_imagingcms.c") and feature.lcms:
--- 317,329 ----
              if feature.freetype_version == 20:
                  defs.append(("USE_FREETYPE_2_0", None))
              exts.append(Extension(
!                 "_imagingft", ["_imagingft.c"], libraries=["freetype"] + libs,
                  define_macros=defs
                  ))
  
          if os.path.isfile("_imagingtiff.c") and feature.tiff:
              exts.append(Extension(
!                 "_imagingtiff", ["_imagingtiff.c"], libraries=["tiff"] + libs
                  ))
  
          if os.path.isfile("_imagingcms.c") and feature.lcms:
***************
*** 328,334 ****
              if sys.platform == "win32":
                  extra.extend(["user32", "gdi32"])
              exts.append(Extension(
!                 "_imagingcms", ["_imagingcms.c"], libraries=["lcms"] + extra
                  ))
  
          if sys.platform == "darwin":
--- 331,337 ----
              if sys.platform == "win32":
                  extra.extend(["user32", "gdi32"])
              exts.append(Extension(
!                 "_imagingcms", ["_imagingcms.c"], libraries=["lcms"] + libs + extra
                  ))
  
          if sys.platform == "darwin":
_______________________________________________
Image-SIG maillist  -  Image-SIG@python.org
http://mail.python.org/mailman/listinfo/image-sig

Reply via email to