This page was exported from phaq [ http://phaq.phunsites.net ]
Export date: Sat Jul 20 4:21:26 2024 / +0000 GMT

Yesterday I started digging around for a solution to create per-user or per-database statistics on MySQL, one of the more important peaces I was missing from it for a long time.


Luckily enough, some guys over there had already done some work on this topic, so I wouldn't have to start over from scratch :-)



It took me only little time to port over the patch from MySQL 5.0.51 to the more current 5.0.83 release within the FreeBSD ports tree, however not soon after starting a build I would encounter this error message:



[root@bld-bsd-224-221 /usr/ports/databases/mysql50-server]# make build
[ - some output omitted - ]
/bin/sh ../ylwrap sql_yacc.yy y.tab.c sql_yacc.cc y.tab.h sql_yacc.h y.output sql_yacc.output -- -d -d --debug --verbose
-d: not found
*** Error code 1

At first I thought the port was corrupted so I refetched the package and reapplied the patch, to no avail.

So I tried again using the original port without having the patch applied, which worked flawlessly.


At second glance I checked for the file list from above command and noticed that it included the file named sql_yacc.yy, one of which had been altered by the previously applied patch.

My conclusion was that the file had been wrongly patched, containing a syntax error or such alike.

I then extracted the unpatched package once more to do a clean rebuild without patches.

I checked the compilation output for the above command line, only to note that it wasn’t actually there!



The question was: Why would the command line “/bin/sh ../ylwrap sql_yacc.yy ….” not get invoked when doing a build on a clean, unpatched package?

I double-checked my patches to see if the command was introduced by itself, which was not the case. That single command actually belongs to the stock MySQL Makefile.


At that stage I decided to just add a single whitespace to the file sql_yacc.yy and run the command manually:



[root@bld-bsd-224-221 /usr/ports/databases/mysql50-server/work/mysql-5.0.83/sql]# make
/bin/sh ../ylwrap sql_yacc.yy y.tab.c sql_yacc.cc y.tab.h sql_yacc.h y.output sql_yacc.output -- -d -d --debug --verbose
-d: not found
*** Error code 1

Interestingly enough that command actually only seems to get involved when the contents of the sql_yacc.yy file is altered.

As such the error was indeed not caused by the patch itself.



So I digged deeper in analyzing the “ylwrap” script file, which is included with the MySQL package. Oh well, at that time I really felt like an idiot!

When I realized that this seemed to by a wrapper script for YACC I also noticed the double-hyphen, which is really an indicator for subsequent command line arguments to be passed on to a sub-process.

Having said that I supposed there was actually missing something in between here: “– {HERE} -d -d”

Could it be that it’s missing the command name of the YACC sub-processor?


Well, do I have YACC installed?




bld-bsd-224-221.genotec.ch:/usr/ports/databases/mysql50-server# which yacc
/usr/bin/yacc

Well, I do … the only catch is: MySQL depends on bison, not on YACC.

To make things worse, neither the FreeBSD port Makefile nor the MySQL configure script check on that dependency, most likely as it is *usually* not required.


Good catch, after having installed bison from the ports tree MySQL compiled like a charm even with all my patches applied :-)

Powered by [ Universal Post Manager ] plugin. HTML saving format developed by gVectors Team www.gVectors.com