[MacPorts] #36828: wine-devel: Undefined symbols "_wine_build", referenced from: _wine_get_build_id in config.o (was: Wine-devel fails to install)
MacPorts
noreply at macports.org
Tue Oct 30 19:52:10 PDT 2012
#36828: wine-devel: Undefined symbols "_wine_build", referenced from:
_wine_get_build_id in config.o
--------------------------+--------------------------
Reporter: asipper10@… | Owner: ryandesign@…
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version: 2.1.2
Resolution: | Keywords:
Port: wine-devel |
--------------------------+--------------------------
Comment (by ryandesign@…):
Thanks. So this is interesting.
Here's what my log has happening at the beginning of the destroot:
{{{
:info:destroot make[1]: Entering directory
`/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports
.org_release_tarballs_ports_x11_wine-devel/wine-
devel/work/wine-1.5.16/libs/wine'
:info:destroot version=`(GIT_DIR=../../.git git describe HEAD 2>/dev/null
|| echo "wine-1.5.16") | sed -n -e '$s/\(.*\)/const char wine_build[] =
"\1";/p'` && (echo $version | cmp -s - version.c) || echo $version
>version.c || (rm -f version.c && exit 1)
:info:destroot make[1]: Leaving directory
`/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports
.org_release_tarballs_ports_x11_wine-devel/wine-
devel/work/wine-1.5.16/libs/wine'
}}}
And then it continues on. Here's what yours says:
{{{
:info:destroot make[1]: Entering directory
`/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports
.org_release_tarballs_ports_x11_wine-devel/wine-
devel/work/wine-1.5.16/libs/wine'
:info:destroot version=`(GIT_DIR=../../.git git describe HEAD 2>/dev/null
|| echo "wine-1.5.16") | sed -n -e '$s/\(.*\)/const char wine_build[] =
"\1";/p'` && (echo $version | cmp -s - version.c) || echo $version
>version.c || (rm -f version.c && exit 1)
:info:destroot /opt/local/bin/gcc-apple-4.2 -m32 -c -I. -I.
-I../../include -I../../include -D__WINESRC__ -DWINE_UNICODE_API=""
-D_REENTRANT -fPIC -Wall -pipe -fno-strict-aliasing -Wdeclaration-after-
statement -Wempty-body -Wstrict-prototypes -Wwrite-strings -fno-omit-
frame-pointer -Wpointer-arith -I/opt/local/include/freetype2
-I/opt/local/include -I/opt/local/include -pipe -O2 -arch i386 -o
version.o version.c
:info:destroot /opt/local/bin/gcc-apple-4.2 -m32 -dynamiclib -install_name
/opt/local/lib/libwine.1.dylib -compatibility_version 1 -current_version
1.0 -Wl,-headerpad_max_install_names c_037.o c_10000.o c_10006.o c_10007.o
c_10029.o c_1006.o c_10079.o c_10081.o c_1026.o c_1250.o c_1251.o c_1252.o
c_1253.o c_1254.o c_1255.o c_1256.o c_1257.o c_1258.o c_1361.o c_20127.o
c_20866.o c_20932.o c_21866.o c_28591.o c_28592.o c_28593.o c_28594.o
c_28595.o c_28596.o c_28597.o c_28598.o c_28599.o c_28600.o c_28603.o
c_28604.o c_28605.o c_28606.o c_424.o c_437.o c_500.o c_737.o c_775.o
c_850.o c_852.o c_855.o c_856.o c_857.o c_860.o c_861.o c_862.o c_863.o
c_864.o c_865.o c_866.o c_869.o c_874.o c_875.o c_878.o c_932.o c_936.o
c_949.o c_950.o casemap.o collation.o compose.o config.o cptable.o debug.o
fold.o ldt.o loader.o mbtowc.o mmap.o port.o sortkey.o string.o utf8.o
wctomb.o wctype.o version.o ../../libs/port/libwine_port.a
-framework CoreFoundation -L/opt/local/lib -framework CoreServices -lz
-Wl,-no_pie -arch i386 -o libwine.1.0.dylib
:info:destroot Undefined symbols for architecture i386:
:info:destroot "_wine_build", referenced from:
:info:destroot _wine_get_build_id in config.o
:info:destroot ld: symbol(s) not found for architecture i386
:info:destroot collect2: ld returned 1 exit status
:info:destroot make[1]: *** [libwine.1.0.dylib] Error 1
:info:destroot make[1]: Leaving directory
`/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports
.org_release_tarballs_ports_x11_wine-devel/wine-
devel/work/wine-1.5.16/libs/wine'
}}}
At which point it has failed.
The line starting with `version=` is complicated and deserves some
analysis. First, it tries to use `git` to determine the version of code
being built. If that fails (for example if the code being built is not
from git but from a release tarball, which is the case in MacPorts) then
the string "wine-1.5.16" is used. (This string is presumably inserted into
the code at the time the release tarball is produced.) The string from the
preceding step is then wrapped in a line of C code, which assigns it to
the C constant "wine_build". This line of C code is assigned to the shell
variable "version". This shell variable is compared with the contents of
the file "version.c". If they are not identical, the shell variable is
written into the file. If writing the file fails, the file is deleted and
the script exits with an error.
In `make`, a file is automatically rebuilt if any of its dependencies have
changed since it was built. version.c is used to build version.o, and
version.o is a dependency of libwine. In my log, after running the command
that begins with `version=`, nothing else happens. version.o and libwine
are not rebuilt. This is what we would expect, since version.o and libwine
have already been built in the build phase, and the version of code has
not changed since then. But in your log, version.o is rebuilt, and then it
tries to rebuild libwine and fails, saying wine_build is not defined. This
tells us that the command that begins with `version=` did in fact change
version.c in your case, thus triggering version.o to rebuild. It also
shows that version.c did not get generated correctly this second time.
Could you attach the file
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports
.org_release_tarballs_ports_x11_wine-devel/wine-
devel/work/wine-1.5.16/libs/wine/version.c so that we can see what ended
up inside it?
Also, could you run the following command and tell us what output, if any,
it produces:
{{{
echo `(GIT_DIR=../../.git git describe HEAD 2>/dev/null || echo
"wine-1.5.16") | sed -n -e '$s/\(.*\)/const char wine_build[] = "\1";/p'`
}}}
--
Ticket URL: <https://trac.macports.org/ticket/36828#comment:6>
MacPorts <http://www.macports.org/>
Ports system for Mac OS
More information about the macports-tickets
mailing list