[Mesa-dev] [PATCH] shared-glapi: Convert to automake

Kristian Høgsberg krh at bitplanet.net
Fri Mar 16 13:29:32 PDT 2012


This fixes a build problem where EGL links to libgbm.la, which encodes
a relative path to it's libglapi.so dependency.  The relative path
breaks when the linker tries to resolve it from src/egl/main instead
of src/gbm.  Typically we silently fall back to the system
libglapi.so, which is wrong and break when there isn't one.

Morale of the story: don't mix mklib and libtool.
---
 configure.ac                      |    2 +
 src/egl/main/Makefile.am          |    1 -
 src/gbm/Makefile.am               |    4 +-
 src/glx/Makefile.am               |    2 +-
 src/mapi/Android.mk               |    4 +-
 src/mapi/es1api/Makefile          |    4 +-
 src/mapi/glapi/Makefile           |    8 ++--
 src/mapi/mapi/sources.mak         |   42 ++++++++++++------------
 src/mapi/shared-glapi/Makefile    |   65 -------------------------------------
 src/mapi/shared-glapi/Makefile.am |   23 +++++++++++++
 src/mapi/vgapi/Makefile           |    4 +-
 11 files changed, 59 insertions(+), 100 deletions(-)
 delete mode 100644 src/mapi/shared-glapi/Makefile
 create mode 100644 src/mapi/shared-glapi/Makefile.am

diff --git a/configure.ac b/configure.ac
index c0d81c9..519662b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -702,6 +702,7 @@ if test "x$enable_shared_glapi" = xyes; then
     # libGL will use libglapi for function lookups (IN_DRI_DRIVER means to use
     # the remap table)
     DEFINES="$DEFINES -DIN_DRI_DRIVER"
+    SRC_DIRS="$SRC_DIRS mapi/shared-glapi"
 fi
 AC_SUBST([SHARED_GLAPI])
 AM_CONDITIONAL(HAVE_SHARED_GLAPI, test $SHARED_GLAPI = 1)
@@ -1985,6 +1986,7 @@ AC_CONFIG_FILES([configs/autoconf
 		src/egl/wayland/wayland-egl/wayland-egl.pc
 		src/egl/wayland/wayland-drm/Makefile
 		src/glx/Makefile
+		src/mapi/shared-glapi/Makefile
 		src/mesa/drivers/dri/dri.pc
 		src/mesa/drivers/dri/Makefile
 		src/mesa/drivers/dri/common/Makefile
diff --git a/src/egl/main/Makefile.am b/src/egl/main/Makefile.am
index a8072c1..9c3935b 100644
--- a/src/egl/main/Makefile.am
+++ b/src/egl/main/Makefile.am
@@ -93,7 +93,6 @@ endif
 if HAVE_EGL_PLATFORM_DRM
 AM_CFLAGS += -DHAVE_DRM_PLATFORM
 libEGL_la_LIBADD += ../../gbm/libgbm.la
-libEGL_la_LIBADD += ../../gbm/libgbm.la
 endif
 
 if HAVE_EGL_PLATFORM_FBDEV
diff --git a/src/gbm/Makefile.am b/src/gbm/Makefile.am
index 1dbc9d1..dede5bc 100644
--- a/src/gbm/Makefile.am
+++ b/src/gbm/Makefile.am
@@ -31,8 +31,8 @@ libgbm_dri_la_CFLAGS = \
 	-DDEFAULT_DRIVER_DIR='"$(DRI_DRIVER_SEARCH_DIR)"' \
 	$(LIBDRM_CFLAGS)
 
-libgbm_la_LDFLAGS += -L$(top_builddir)/$(LIB_DIR)
-libgbm_la_LIBADD += libgbm_dri.la -lglapi
+libgbm_la_LIBADD += \
+	libgbm_dri.la $(top_builddir)/src/mapi/shared-glapi/libglapi.la
 endif
 
 all-local: libgbm.la
diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am
index 79dc405..a11bd3f 100644
--- a/src/glx/Makefile.am
+++ b/src/glx/Makefile.am
@@ -21,7 +21,7 @@
 
 if HAVE_SHARED_GLAPI
 SHARED_GLAPI_CFLAGS = -DGLX_SHARED_GLAPI
-SHARED_GLAPI_LIBS = -L$(top_builddir)/$(LIB_DIR) -lglapi
+SHARED_GLAPI_LIBS = $(top_builddir)/src/mapi/shared-glapi/libglapi.la
 endif
 
 GLAPI_LIB = ../mapi/glapi/libglapi.a
diff --git a/src/mapi/Android.mk b/src/mapi/Android.mk
index fe9e40e..b75361f 100644
--- a/src/mapi/Android.mk
+++ b/src/mapi/Android.mk
@@ -25,7 +25,7 @@
 
 LOCAL_PATH := $(call my-dir)
 
-# get MAPI_GLAPI_SOURCES
+# get MAPI_GLAPI_FILES
 include $(LOCAL_PATH)/mapi/sources.mak
 
 mapi_abi_headers :=
@@ -38,7 +38,7 @@ include $(CLEAR_VARS)
 
 abi_header := shared-glapi/glapi_mapi_tmp.h
 
-LOCAL_SRC_FILES := $(addprefix mapi/, $(MAPI_GLAPI_SOURCES))
+LOCAL_SRC_FILES := $(MAPI_GLAPI_FILES)
 
 LOCAL_CFLAGS := \
 	-DMAPI_MODE_GLAPI \
diff --git a/src/mapi/es1api/Makefile b/src/mapi/es1api/Makefile
index 0a0449b..2545dd0 100644
--- a/src/mapi/es1api/Makefile
+++ b/src/mapi/es1api/Makefile
@@ -41,8 +41,8 @@ esapi_CPPFLAGS := \
 	-DMAPI_ABI_HEADER=\"$(ESAPI)/glapi_mapi_tmp.h\"
 
 include $(MAPI)/sources.mak
-esapi_SOURCES := $(addprefix $(MAPI)/, $(MAPI_BRIDGE_SOURCES))
-esapi_OBJECTS := $(MAPI_BRIDGE_SOURCES:.c=.o)
+esapi_SOURCES := $(MAPI_BRIDGE_FILES)
+esapi_OBJECTS := $(esapi_SOURCES:.c=.o)
 esapi_CPPFLAGS += -DMAPI_MODE_BRIDGE
 
 esapi_LIB_DEPS := -L$(TOP)/$(LIB_DIR) -l$(GLAPI_LIB) $(esapi_LIB_DEPS)
diff --git a/src/mapi/glapi/Makefile b/src/mapi/glapi/Makefile
index bb4ed65..bca2432 100644
--- a/src/mapi/glapi/Makefile
+++ b/src/mapi/glapi/Makefile
@@ -19,18 +19,18 @@ ifeq ($(SHARED_GLAPI),1)
 glapi_CPPFLAGS += \
 	-DMAPI_MODE_BRIDGE \
 	-DMAPI_ABI_HEADER=\"glapi/glapi_mapi_tmp.h\"
-glapi_SOURCES := $(addprefix $(MAPI)/, $(MAPI_BRIDGE_SOURCES))
+glapi_SOURCES := $(MAPI_BRIDGE_FILES)
 
 glapi_GLAPI_OBJECTS :=
 glapi_ASM_OBJECTS :=
-glapi_MAPI_OBJECTS := $(MAPI_BRIDGE_SOURCES:.c=.o)
+glapi_MAPI_OBJECTS := $(MAPI_BRIDGE_FILES:.c=.o)
 else
 glapi_CPPFLAGS += -DMAPI_MODE_UTIL
-glapi_SOURCES := $(GLAPI_SOURCES) $(addprefix $(MAPI)/, $(MAPI_UTIL_SOURCES))
+glapi_SOURCES := $(GLAPI_SOURCES) $(MAPI_UTIL_FILES)
 
 glapi_GLAPI_OBJECTS := $(GLAPI_SOURCES:.c=.o)
 glapi_ASM_OBJECTS := $(GLAPI_ASM_SOURCES:.S=.o)
-glapi_MAPI_OBJECTS := $(MAPI_UTIL_SOURCES:.c=.o)
+glapi_MAPI_OBJECTS := $(MAPI_UTIL_FILES:.c=.o)
 endif # SHARED_GLAPI
 
 glapi_OBJECTS := \
diff --git a/src/mapi/mapi/sources.mak b/src/mapi/mapi/sources.mak
index 2814186..35ea3cd 100644
--- a/src/mapi/mapi/sources.mak
+++ b/src/mapi/mapi/sources.mak
@@ -3,34 +3,34 @@
 # mapi may be used in several ways
 #
 #  - In default mode, mapi implements the interface defined by mapi.h.  To use
-#    this mode, compile MAPI_SOURCES.
+#    this mode, compile MAPI_FILES.
 #
 #  - In util mode, mapi provides utility functions for use with glapi.  To use
-#    this mode, compile MAPI_UTIL_SOURCES with MAPI_MODE_UTIL defined.
+#    this mode, compile MAPI_UTIL_FILES with MAPI_MODE_UTIL defined.
 #
 #  - In glapi mode, mapi implements the interface defined by glapi.h.  To use
-#    this mode, compile MAPI_GLAPI_SOURCES with MAPI_MODE_GLAPI defined.
+#    this mode, compile MAPI_GLAPI_FILES with MAPI_MODE_GLAPI defined.
 #
 #  - In bridge mode, mapi provides entry points calling into glapi.  To use
-#    this mode, compile MAPI_BRIDGE_SOURCES with MAPI_MODE_BRIDGE defined.
+#    this mode, compile MAPI_BRIDGE_FILES with MAPI_MODE_BRIDGE defined.
 
-MAPI_UTIL_SOURCES = \
-	u_current.c \
-	u_execmem.c
+MAPI_UTIL_FILES := \
+	$(TOP)/src/mapi/mapi/u_current.c \
+	$(TOP)/src/mapi/mapi/u_execmem.c
 
-MAPI_SOURCES = \
-	entry.c \
-	mapi.c \
-	stub.c \
-	table.c \
-	$(MAPI_UTIL_SOURCES)
+MAPI_FILES := \
+	$(TOP)/src/mapi/mapi/entry.c \
+	$(TOP)/src/mapi/mapi/mapi.c \
+	$(TOP)/src/mapi/mapi/stub.c \
+	$(TOP)/src/mapi/mapi/table.c \
+	$(MAPI_UTIL_FILES)
 
-MAPI_GLAPI_SOURCES = \
-	entry.c \
-	mapi_glapi.c \
-	stub.c \
-	table.c \
-	$(MAPI_UTIL_SOURCES)
+MAPI_GLAPI_FILES := \
+	$(TOP)/src/mapi/mapi/entry.c \
+	$(TOP)/src/mapi/mapi/mapi_glapi.c \
+	$(TOP)/src/mapi/mapi/stub.c \
+	$(TOP)/src/mapi/mapi/table.c \
+	$(MAPI_UTIL_FILES)
 
-MAPI_BRIDGE_SOURCES = \
-	entry.c
+MAPI_BRIDGE_FILES := \
+	$(TOP)/src/mapi/mapi/entry.c
diff --git a/src/mapi/shared-glapi/Makefile b/src/mapi/shared-glapi/Makefile
deleted file mode 100644
index 3de864d..0000000
--- a/src/mapi/shared-glapi/Makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-# src/mapi/shared-glapi/Makefile
-#
-# Used by OpenGL ES or when --enable-shared-glapi is specified
-#
-
-TOP := ../../..
-include $(TOP)/configs/current
-
-GLAPI := $(TOP)/src/mapi/glapi
-MAPI := $(TOP)/src/mapi/mapi
-
-glapi_CPPFLAGS := \
-	-I$(TOP)/include \
-	-I$(TOP)/src/mapi \
-	-DMAPI_MODE_GLAPI \
-	-DMAPI_ABI_HEADER=\"shared-glapi/glapi_mapi_tmp.h\"
-
-include $(MAPI)/sources.mak
-glapi_SOURCES := $(addprefix $(MAPI)/, $(MAPI_GLAPI_SOURCES))
-glapi_OBJECTS := $(MAPI_GLAPI_SOURCES:.c=.o)
-
-.PHONY: default
-default: depend $(TOP)/$(LIB_DIR)/$(GLAPI_LIB_NAME)
-
-$(TOP)/$(LIB_DIR)/$(GLAPI_LIB_NAME): $(glapi_OBJECTS)
-	$(MKLIB) -o $(GLAPI_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-		-major 0 -minor 0 -patch 0 \
-		-id $(INSTALL_LIB_DIR)/lib$(GLAPI_LIB).0.dylib \
-		$(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
-		$(glapi_OBJECTS) $(GLAPI_LIB_DEPS)
-
-$(glapi_OBJECTS): %.o: $(MAPI)/%.c
-	$(CC) -c $(glapi_CPPFLAGS) $(CFLAGS) $< -o $@
-
-$(glapi_SOURCES): glapi_mapi_tmp.h
-
-include $(GLAPI)/gen/glapi_gen.mk
-glapi_mapi_tmp.h: $(GLAPI)/gen/gl_and_es_API.xml $(glapi_gen_mapi_deps)
-	$(call glapi_gen_mapi,$<,shared-glapi)
-
-.PHONY: clean
-clean:
-	-rm -f $(TOP)/$(LIB_DIR)/$(GLAPI_LIB_NAME)
-	-rm -f $(glapi_OBJECTS)
-	-rm -f depend depend.bak
-	-rm -f glapi_mapi_tmp.h
-
-install:
-	$(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
-	$(MINSTALL) $(TOP)/$(LIB_DIR)/$(GLAPI_LIB_GLOB) \
-		$(DESTDIR)$(INSTALL_LIB_DIR)
-
-# workaround a bug in makedepend
-makedepend_CPPFLAGS := \
-	$(filter-out -DMAPI_ABI_HEADER=%, $(glapi_CPPFLAGS))
-$(glapi_OBJECTS): glapi_mapi_tmp.h
-
-depend: $(glapi_SOURCES)
-	@echo "running $(MKDEP)"
-	@touch depend
-	@$(MKDEP) $(MKDEP_OPTIONS) -f- $(DEFINES) $(makedepend_CPPFLAGS) \
-		$(glapi_SOURCES) 2>/dev/null | sed -e 's,^$(MAPI)/,,' \
-		> depend
-
--include depend
diff --git a/src/mapi/shared-glapi/Makefile.am b/src/mapi/shared-glapi/Makefile.am
new file mode 100644
index 0000000..d24a57e
--- /dev/null
+++ b/src/mapi/shared-glapi/Makefile.am
@@ -0,0 +1,23 @@
+# Used by OpenGL ES or when --enable-shared-glapi is specified
+
+TOP := ../../..
+GLAPI = $(top_srcdir)/src/mapi/glapi
+include $(top_srcdir)/src/mapi/mapi/sources.mak
+
+lib_LTLIBRARIES = libglapi.la
+libglapi_la_SOURCES = $(MAPI_GLAPI_FILES)
+
+include $(GLAPI)/gen/glapi_gen.mk
+glapi_mapi_tmp.h : $(GLAPI)/gen/gl_and_es_API.xml $(glapi_gen_mapi_deps)
+	$(call glapi_gen_mapi,$<,shared-glapi)
+
+AM_CPPFLAGS =							\
+	$(DEFINES)						\
+	-I$(top_srcdir)/include					\
+	-I$(top_srcdir)/src/mapi				\
+	-DMAPI_MODE_GLAPI					\
+	-DMAPI_ABI_HEADER=\"shared-glapi/glapi_mapi_tmp.h\"
+
+all-local: libglapi.la
+	$(MKDIR_P) $(top_builddir)/$(LIB_DIR)
+	ln -f .libs/libglapi.so.0.0.0 $(top_builddir)/$(LIB_DIR)/libglapi.so
diff --git a/src/mapi/vgapi/Makefile b/src/mapi/vgapi/Makefile
index 68cf26e..550b68c 100644
--- a/src/mapi/vgapi/Makefile
+++ b/src/mapi/vgapi/Makefile
@@ -10,8 +10,8 @@ VG_LIB_PATCH = 0
 MAPI := $(TOP)/src/mapi/mapi
 
 include $(MAPI)/sources.mak
-VGAPI_SOURCES := $(addprefix $(MAPI)/, $(MAPI_SOURCES))
-VGAPI_OBJECTS := $(MAPI_SOURCES:.c=.o)
+VGAPI_SOURCES := $(MAPI_FILES)
+VGAPI_OBJECTS := $(VGAPI_SOURCES:.c=.o)
 
 VGAPI_CPPFLAGS := -DMAPI_ABI_HEADER=\"vgapi/vgapi_tmp.h\"
 
-- 
1.7.9.1



More information about the mesa-dev mailing list