This page was exported from phaq [ http://phaq.phunsites.net ] Export date:Sat May 4 7:13:23 2024 / +0000 GMT ___________________________________________________ Title: Strange compilation error on MySQL --------------------------------------------------- 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 :-) --------------------------------------------------- Images: --------------------------------------------------- --------------------------------------------------- Post date: 2009-07-16 14:01:38 Post date GMT: 2009-07-16 13:01:38 Post modified date: 2010-12-18 17:26:06 Post modified date GMT: 2010-12-18 16:26:06 ____________________________________________________________________________________________ Export of Post and Page as text file has been powered by [ Universal Post Manager ] plugin from www.gconverters.com