Farkas Levente schreef op do 23-06-2011 om 00:47 [+0200]:
hi,
i try to package opencv for mingw which use cmake. when i try to build
it i need to add a few params, but i can't do it, because:
%mingw_cmake "-DENABLE_OPENMP=1"
but during the build it runs:
/usr/bin/cmake -DCMAKE_VERBOSE_MAKEFILE=ON
-DCMAKE_INSTALL_PREFIX:PATH=/usr/i686-w64-mingw32/sys-root/mingw
-DCMAKE_INSTALL_LIBDIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/lib
-DINCLUDE_INSTALL_DIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/include
-DLIB_INSTALL_DIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/lib
-DSYSCONF_INSTALL_DIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/etc
-DSHARE_INSTALL_PREFIX:PATH=/usr/i686-w64-mingw32/sys-root/mingw/share
-DCMAKE_SKIP_RPATH:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=ON
-DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw32.cmake ..
-DENABLE_OPENMP=1
as you can see the path is NOT the last param which cause problems:-)
actually i don't understand it since mingw32_cmake defined as:
%mingw32_cmake() %{mingw32_env} ; \
__mingw32_topdir=.; if ! test -f CMakeLists.txt; then
__mingw32_topdir=..; fi; \\\
%__cmake \\\
-DCMAKE_VERBOSE_MAKEFILE=ON \\\
-DCMAKE_INSTALL_PREFIX:PATH=%{mingw32_prefix} \\\
-DCMAKE_INSTALL_LIBDIR:PATH=%{mingw32_libdir} \\\
-DINCLUDE_INSTALL_DIR:PATH=%{mingw32_includedir} \\\
-DLIB_INSTALL_DIR:PATH=%{mingw32_libdir} \\\
-DSYSCONF_INSTALL_DIR:PATH=%{mingw32_sysconfdir} \\\
-DSHARE_INSTALL_PREFIX:PATH=%{mingw32_datadir} \\\
%{?_cmake_skip_rpath} \\\
-DBUILD_SHARED_LIBS:BOOL=ON \\\
-DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw32.cmake \\\
$* $__mingw32_topdir
where the __mingw32_topdir is the last param so when it's called why not
the last param?
any help would be useful.
thanks.
The $* mentioned in the mingw32_cmake macro is a typo. I've just fixed
that in the repo. However, this doesn't solve the real problem.
The issue is that the list of arguments given to the mingw_cmake macro
need to be passed on to the mingw32_cmake and mingw64_cmake macros.
Appararently RPM doesn't like this kind of argument pass-through as can
be seen in this simple example:
$ rpm --eval '
%define macro1() start - %* - end
%define macro2() %{macro1}
%macro2 test
'
Given the mingw-w64 context, you could interpret macro1 as mingw32_cmake
and macro2 as mingw_cmake (it's basically a simplified version of what
happens inside these macros).
This example returns this result:
start - - end
(while you would expect 'start - test - end')
I also would be interested in having a method to get the expected
behaviour.
It can be worked-around using something like this:
$ rpm --eval '
%define macro1 start - %* - end
%define macro2() %{macro1}
%macro2 test
'
This returns 'start - test - end', but has the side-effect that it
breaks calling %macro1 as can be seen in the next example:
$ rpm --eval '
%define macro1 start - %* - end
%define macro2() %{macro1}
%macro1 test
'
which returns:
start - %* - end test
Perhaps anybody on this mailing list knows how to properly implemented
such RPM macros ?
Kind regards,
Erik van Pienbroek