Hi Jon,

Sorry about this breakage. I assumed that the library extensions are handled
consistently across mesa. Seems like I was wrong.

Guessing that you meant to send this to the mesa-dev ?

On 06/04/14 15:59, Jon TURNEY wrote:
> Partially revert bba9c28 "configure: use LIB_EXT rather than hardcoded .so"
> 
This is an interesting (and slightly messy) topic.

List of all dlopen (or equivalent) users

Hard-coded
--------
- src/egl/drivers/dri2/egl_dri2.c               *dri.so, libglapi.so.0
Both extension and version are hard-coded.

- src/gbm/backends/dri/gbm_dri.c                *dri.so

- src/gbm/main/backend.c                        gbm_dri.so, gbm_gallium_drm.so
GBM backends, the former is built-in into libgbm.

- src/glx/dri_common.c                          *dri.so, libGL.so.1
Both extension and version are hard-coded. The Apple specific glx handles
libGL appropriately.

- src/loader/loader.c                           libudev.so.*
Used on platforms that have libudev (i.e. linux) so we should be safe


Platform aware
--------------
- src/egl/main/egldriver.c                      egl_dri2, egl_gallium
EGL backends, the former is built-in into libEGL.

- src/gallium/targets/egl-static/egl_st.c       st_GL, libglapi
GLapi providers - the lib prefix in the latter is hard-coded.

- src/mesa/main/texcompress_s3tc.c              DXTN_LIBNAME
Library name is correctly set to Windows and *nix.
NOTE: Apple one is missing.

- src/gallium/auxiliary/pipe-loader/pipe_loader.c pipe_*
Only built via automake. Current users opencl, xa, gallium_gbm.

- src/gallium/auxiliary/util/u_format_s3tc.c:   DXTN_LIBNAME
Library name is correctly set to Windows, *nix and Apple.


Summary
-------
 - all the dri handling uses hard-coded .so library extension and could be
compacted into the src/loader.
 - the rest seems to be on "as needed" basis and with a bug or two lurking in
the code.
 - would be great if a brave soul could clean the remaining hard-coded mayhem.

Mildly related: There are a few pieces in mesa that mention DJGPP which could
be cleaned up.

> Filenames passed to dlopen() don't need to use the platform's default 
> extension
> for shared libraries.
> 
> Using the '.so' extension when dlopen()ing DRI drivers is hardcoded into mesa
> and the X server, so it should be hardcoded here in the Makefile as well.
> 
Interesting, all the xserver modules are correctly* handled while the dri
drivers are not.

* Use .dll for Windows, .so otherwise (including Apple, hmmm)

> A similar fix is probably also needed for gallium DRI drivers.
> 
Currently the only gallium related part is the "compatibility symlinks"
script, that is enabled only for linux. Thanks for the heads up :)

> (Consider that if we were starting from scratch, perhaps we would use a custom
> extension like .dri instead)
> 
IMHO if we're starting from scratch we should use the platform specific
extensions consistently but neither suggestion matter in this case :'(

With that said the patch is
Reviewed-by: Emil Velikov <emil.l.veli...@gmail.com>

> Cc: Emil Velikov <emil.l.veli...@gmail.com>
> Signed-off-by: Jon TURNEY <jon.tur...@dronecode.org.uk>
> ---
>  src/mesa/drivers/dri/Makefile.am | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/Makefile.am 
> b/src/mesa/drivers/dri/Makefile.am
> index 13127f0..b66c041 100644
> --- a/src/mesa/drivers/dri/Makefile.am
> +++ b/src/mesa/drivers/dri/Makefile.am
> @@ -9,37 +9,37 @@ SUBDIRS+=common
>  if HAVE_I915_DRI
>  SUBDIRS += i915
>  MEGADRIVERS_DEPS += i915/libi915_dri.la
> -MEGADRIVERS += i915_dri.@LIB_EXT@
> +MEGADRIVERS += i915_dri.so
>  endif
>  
>  if HAVE_I965_DRI
>  SUBDIRS += i965
>  MEGADRIVERS_DEPS += i965/libi965_dri.la
> -MEGADRIVERS += i965_dri.@LIB_EXT@
> +MEGADRIVERS += i965_dri.so
>  endif
>  
>  if HAVE_NOUVEAU_DRI
>  SUBDIRS += nouveau
>  MEGADRIVERS_DEPS += nouveau/libnouveau_dri.la
> -MEGADRIVERS += nouveau_vieux_dri.@LIB_EXT@
> +MEGADRIVERS += nouveau_vieux_dri.so
>  endif
>  
>  if HAVE_R200_DRI
>  SUBDIRS += r200
>  MEGADRIVERS_DEPS += r200/libr200_dri.la
> -MEGADRIVERS += r200_dri.@LIB_EXT@
> +MEGADRIVERS += r200_dri.so
>  endif
>  
>  if HAVE_RADEON_DRI
>  SUBDIRS += radeon
>  MEGADRIVERS_DEPS += radeon/libradeon_dri.la
> -MEGADRIVERS += radeon_dri.@LIB_EXT@
> +MEGADRIVERS += radeon_dri.so
>  endif
>  
>  if HAVE_SWRAST_DRI
>  SUBDIRS += swrast
>  MEGADRIVERS_DEPS += swrast/libswrast_dri.la
> -MEGADRIVERS += swrast_dri.@LIB_EXT@
> +MEGADRIVERS += swrast_dri.so
>  endif
>  
>  pkgconfigdir = $(libdir)/pkgconfig
> @@ -51,7 +51,7 @@ driinclude_HEADERS = 
> $(top_srcdir)/include/GL/internal/dri_interface.h
>  nodist_EXTRA_mesa_dri_drivers_la_SOURCES = dummy.cpp
>  mesa_dri_drivers_la_SOURCES =
>  mesa_dri_drivers_la_LDFLAGS = \
> -        -module -avoid-version -shared -no-undefined \
> +        -module -avoid-version -shared -no-undefined -shrext .so \
>          -Wl,-Bsymbolic \
>          $(GC_SECTIONS) \
>          $()
> @@ -76,19 +76,19 @@ if HAVE_COMPAT_SYMLINKS
>  # Add a link to allow setting LD_LIBRARY_PATH/LIBGL_DRIVERS_PATH to /lib of 
> the build tree.
>  all-local: mesa_dri_drivers.la
>       $(AM_V_at)$(MKDIR_P) $(top_builddir)/$(LIB_DIR);
> -     $(AM_V_GEN)ln -f .libs/mesa_dri_drivers.@LIB_EXT@ \
> -                      $(top_builddir)/$(LIB_DIR)/mesa_dri_drivers.@LIB_EXT@;
> +     $(AM_V_GEN)ln -f .libs/mesa_dri_drivers.so \
> +                      $(top_builddir)/$(LIB_DIR)/mesa_dri_drivers.so;
>       $(AM_V_GEN)for i in $(MEGADRIVERS); do \
> -             ln -f $(top_builddir)/$(LIB_DIR)/mesa_dri_drivers.@LIB_EXT@ \
> +             ln -f $(top_builddir)/$(LIB_DIR)/mesa_dri_drivers.so \
>                     $(top_builddir)/$(LIB_DIR)/$$i; \
>       done;
>  endif
>  
>  # hardlink each megadriver instance, but don't actually have
> -# mesa_dri_drivers.@LIB_EXT@ in the set of final installed files.
> +# mesa_dri_drivers.so in the set of final installed files.
>  install-data-hook:
>       for i in $(MEGADRIVERS); do \
> -             ln -f $(DESTDIR)$(dridir)/mesa_dri_drivers.@LIB_EXT@ \
> +             ln -f $(DESTDIR)$(dridir)/mesa_dri_drivers.so \
>                     $(DESTDIR)$(dridir)/$$i; \
>       done;
>       $(RM) -f $(DESTDIR)$(dridir)/mesa_dri_drivers.*
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to