ports/159231: [PATCH] databases/mysql-server: enable dtrace support on CURRENT or STABLE

Alex Samorukov samm at os2.kiev.ua
Wed Jul 27 12:50:13 UTC 2011


>Number:         159231
>Category:       ports
>Synopsis:       [PATCH] databases/mysql-server: enable dtrace support on CURRENT or STABLE
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jul 27 12:50:11 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Alex Samorukov
>Release:        FreeBSD 8.2-RELEASE i386
>Organization:
NetArt s.r.o.
>Environment:
System: FreeBSD bsd 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Fri Feb 18 02:24:46 UTC 2011
>Description:
Added DTRACE configuration option (default off) and patched cmake files to build on
FreeBSD. Issue also reported to upstream: http://bugs.mysql.com/bug.php?id=62005

Added file(s):
- files/patch-dtrace.cmake
- files/patch-dtrace_prelink.cmake

Port maintainer (ale at FreeBSD.org) is cc'd.

Generated with FreeBSD Port Tools 0.99
>How-To-Repeat:
>Fix:

--- mysql-server-5.5.14_1.patch begins here ---
diff -ruN --exclude=CVS /root/mysql55-server.orig/Makefile /root/mysql55-server/Makefile
--- /root/mysql55-server.orig/Makefile	2011-07-12 16:44:51.000000000 +0200
+++ /root/mysql55-server/Makefile	2011-07-27 14:40:26.000000000 +0200
@@ -7,7 +7,7 @@
 
 PORTNAME?=	mysql
 PORTVERSION=	5.5.14
-PORTREVISION?=	0
+PORTREVISION?=	1
 CATEGORIES=	databases ipv6
 MASTER_SITES=	${MASTER_SITE_MYSQL}
 MASTER_SITE_SUBDIR=	MySQL-5.5
@@ -21,7 +21,8 @@
 MAKE_JOBS_SAFE=	yes
 
 OPTIONS=	OPENSSL "Enable SSL support" on \
-		FASTMTX "Replace mutexes with spinlocks" off
+		FASTMTX "Replace mutexes with spinlocks" off \
+		DTRACE "Enable DTrace support" off
 
 CMAKE_ARGS+=	-DINSTALL_DOCDIR="share/doc/mysql" \
 		-DINSTALL_DOCREADMEDIR="share/doc/mysql" \
@@ -54,6 +55,10 @@
 CMAKE_ARGS+=	-DWITH_FAST_MUTEXES=1
 .endif
 
+.if defined(WITH_DTRACE)
+CMAKE_ARGS+=	-DENABLE_DTRACE=1
+.endif
+
 # MySQL-Server part
 .if !defined(CLIENT_ONLY)
 USE_MYSQL=	yes
diff -ruN --exclude=CVS /root/mysql55-server.orig/files/patch-dtrace.cmake /root/mysql55-server/files/patch-dtrace.cmake
--- /root/mysql55-server.orig/files/patch-dtrace.cmake	1970-01-01 01:00:00.000000000 +0100
+++ /root/mysql55-server/files/patch-dtrace.cmake	2011-07-27 14:40:27.000000000 +0200
@@ -0,0 +1,70 @@
+--- cmake/dtrace.cmake.orig	2011-06-21 16:42:39.000000000 +0000
++++ cmake/dtrace.cmake	2011-07-27 11:49:47.214815458 +0000
+@@ -34,13 +34,11 @@
+  FIND_PROGRAM(DTRACE dtrace)
+  MARK_AS_ADVANCED(DTRACE)
+ 
+- # On FreeBSD, dtrace does not handle userland tracing yet
+- IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD"
+-     AND NOT BUGGY_GCC_NO_DTRACE_MODULES)
++ IF(DTRACE AND NOT BUGGY_GCC_NO_DTRACE_MODULES)
+    SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
+  ENDIF()
+  SET(HAVE_DTRACE ${ENABLE_DTRACE})
+- IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
++ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS|FreeBSD")
+    IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
+      SET(DTRACE_FLAGS -32 CACHE INTERNAL "DTrace architecture flags")
+    ELSE()
+@@ -90,6 +88,10 @@
+ ENDIF()
+ 
+ FUNCTION(DTRACE_INSTRUMENT target)
++    # add libelf to the linker in the FreeBSD
++    IF(ENABLE_DTRACE AND CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++        TARGET_LINK_LIBRARIES(${target} elf)
++    ENDIF()
+   IF(BUGGY_GCC_NO_DTRACE_MODULES)
+     GET_TARGET_PROPERTY(target_type ${target} TYPE)
+     IF(target_type MATCHES "MODULE_LIBRARY")
+@@ -105,7 +107,7 @@
+ 
+     # On Solaris, invoke dtrace -G to generate object file and
+     # link it together with target.
+-    IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
++    IF(CMAKE_SYSTEM_NAME MATCHES "SunOS|FreeBSD")
+       SET(objdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
+       SET(outfile ${objdir}/${target}_dtrace.o)
+       GET_TARGET_PROPERTY(target_type ${target} TYPE)
+@@ -117,6 +119,7 @@
+           -DDFILE=${CMAKE_BINARY_DIR}/include/probes_mysql.d
+           -DDTRACE_FLAGS=${DTRACE_FLAGS}
+           -DDIRS=.
++          -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+           -DTYPE=${target_type}
+           -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
+         WORKING_DIRECTORY ${objdir}
+@@ -152,13 +155,13 @@
+ # run them again through dtrace -G to generate an ELF file that links
+ # to mysqld.
+ MACRO (DTRACE_INSTRUMENT_STATIC_LIBS target libs)
+-IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND ENABLE_DTRACE)
++IF(CMAKE_SYSTEM_NAME MATCHES "SunOS|FreeBSD" AND ENABLE_DTRACE)
+   # Filter out non-static libraries in the list, if any
+   SET(static_libs)
+   FOREACH(lib ${libs})
+     GET_TARGET_PROPERTY(libtype ${lib} TYPE)
+     IF(libtype MATCHES STATIC_LIBRARY)
+-      SET(static_libs ${static_lics} ${lib})
++      SET(static_libs ${static_libs} ${lib})
+     ENDIF()
+   ENDFOREACH()
+ 
+@@ -177,6 +180,7 @@
+    -DDTRACE_FLAGS=${DTRACE_FLAGS}
+    "-DDIRS=${dirs}"
+    -DTYPE=MERGE
++   -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+    -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
+    VERBATIM
+   )
diff -ruN --exclude=CVS /root/mysql55-server.orig/files/patch-dtrace_prelink.cmake /root/mysql55-server/files/patch-dtrace_prelink.cmake
--- /root/mysql55-server.orig/files/patch-dtrace_prelink.cmake	1970-01-01 01:00:00.000000000 +0100
+++ /root/mysql55-server/files/patch-dtrace_prelink.cmake	2011-07-27 14:40:27.000000000 +0200
@@ -0,0 +1,36 @@
+--- cmake/dtrace_prelink.cmake.orig	2011-06-21 16:42:39.000000000 +0000
++++ cmake/dtrace_prelink.cmake	2011-07-27 11:48:13.000000000 +0000
+@@ -44,7 +44,13 @@
+     FILE(STRINGS ${dir}/dtrace_objects  OBJS)
+     FOREACH(obj ${OBJS})
+       IF(obj)
+-        EXECUTE_PROCESS(COMMAND cp ${obj} dtrace_objects_merge)
++        # use original, non modified object
++        IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++            GET_FILENAME_COMPONENT(obj_dest ${obj} NAME)
++            EXECUTE_PROCESS(COMMAND cp ${obj}.orig dtrace_objects_merge/${obj_dest})
++        ELSE()
++            EXECUTE_PROCESS(COMMAND cp ${obj} dtrace_objects_merge)
++        ENDIF()
+       ENDIF()
+     ENDFOREACH()
+   ENDFOREACH()
+@@ -62,6 +68,18 @@
+   LIST(APPEND REL_OBJECTS ${REL})
+ ENDFOREACH()
+ 
++# there is a bug in dtrace/freebsd. When dtrace -G is running second time on already 
++# processed object it producing broken output. We need to save objects to use them 
++# later on a link stage
++
++IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++    FOREACH(rel_object ${REL_OBJECTS})
++	EXECUTE_PROCESS(
++	     COMMAND cp ${rel_object} ${rel_object}.orig
++	)
++    ENDFOREACH()
++ENDIF()
++
+ FILE(WRITE  dtrace_timestamp "")
+ EXECUTE_PROCESS(
+  COMMAND ${DTRACE} ${DTRACE_FLAGS} -o ${OUTFILE}  -G -s ${DFILE}  ${REL_OBJECTS}
--- mysql-server-5.5.14_1.patch ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list