Re: [cmake-developers] [PATCH] Qt4Macros generate resources with same file name

2015-11-30 Thread Joseph Shen
Yes, I found that. Thanks for the view, I will work an more acceptable
patch later this week.

Have a nice day~~

On Mon, Nov 30, 2015, 11:48 PM Clinton Stimpson 
wrote:

> On Tuesday, November 24, 2015 11:01:27 AM Joseph Shen wrote:
> > Dear CMake developers:
> >
> > Please view attached small patch that try to fix Qt4Macros generate
> > resources with same file name error.
> >
> > Right now, in the CMake main branch, using cmake with Qt4 library
> > add resources project can be done like this:
> >
> >  qt4_add_resources(app_source_res res_a.qrc)
> >  qt4_add_resources(app_source_res res_b.qrc)
> >
> > and above two line added two resource file, but if we try to add resource
> > file with same name, a very subtle error will happen: only one file will
> > be compile the as resources, and the other was totally ignored.
> >
> > In some big projects, using the same file name as resource file name
> > can be very common, especially when we using multi cmake files try
> > to make the whole project into small ones, in each cmake files someone
> > maybe just using the same resources file name like res.qrc which is
> > located in the sub module resources folder.
> >
> >qt4_add_resources(app_source_res res.qrc)
> >
> > so, if they try to do this, and in the last add ${app_source_res} to the
> > dependency list using:
> >
> >   add_executable(project_name ${app_source_res} ...)
> >
> > but in reality they just add one resources file, but CMake do not report
> > any error or warning.
> >
> > From the source of Qt4Macros we can see:
> >
> > line 211:   get_filename_component(outfilename ${it} NAME_WE)
> > line 244:   ARGS ${rcc_options} -name ${outfilename} -o ${outfile}
> ${infile}
> >
> >
> > became we just using NAME_WE as the output file, if two files with same
> > file name, one will overwrite the other, and this is the reason why the
> > error
> > will happen.
> >
> > To fix this, I view the whole Qt4Macros source file, find a function
> > QT4_MAKE_OUTPUT_FILE already exist to do something just what we
> > need. so I work out a patch add two line code and remove two, and it
> works
> > good to me, and I think this might fix the problem.
> >
> > Please view this patch, thanks :)
>
>
> Back on list with a more concrete example, and also to prevent others from
> merging this patch, because I don't think this patch should be accepted.
> The
> random string breaks using the Q_INIT_RESOURCE() macro.
>
>
> For example:
> ===
> project(qrc)
>
> find_package(Qt4)
> include(${QT_USE_FILE})
>
> qt4_add_resources(qrc_srcs ${CMAKE_CURRENT_SOURCE_DIR}/my.qrc)
>
> add_library(qrc STATIC ${qrc_srcs})
>
> add_executable(main main.cpp)
> target_link_libraries(main qrc)
> 
>
> main.cpp has:
> int main()
> {
>   Q_INIT_RESOURCE(my);
> }
>
> With the patch applied, I now get the link error:
>
> main.cpp:(.text+0x5): undefined reference to `qInitResources_my()'
>
> "my" comes from the basename of my.qrc, and is the name used for the
> resource.
> With CMake generating a random name, there would be no way to reference
> that
> name when calling Q_INIT_RESOURCE.
>
> I would prefer allowing the caller to pass in an alternate -name option for
> rcc, as I said in my first review.  With that, the caller would be able to
> pass
> a random string.
>
> Clint
>
>
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers

Re: [cmake-developers] [PATCH] Qt4Macros generate resources with same file name

2015-11-30 Thread Clinton Stimpson
On Tuesday, November 24, 2015 11:01:27 AM Joseph Shen wrote:
> Dear CMake developers:
> 
> Please view attached small patch that try to fix Qt4Macros generate
> resources with same file name error.
> 
> Right now, in the CMake main branch, using cmake with Qt4 library
> add resources project can be done like this:
> 
>  qt4_add_resources(app_source_res res_a.qrc)
>  qt4_add_resources(app_source_res res_b.qrc)
> 
> and above two line added two resource file, but if we try to add resource
> file with same name, a very subtle error will happen: only one file will
> be compile the as resources, and the other was totally ignored.
> 
> In some big projects, using the same file name as resource file name
> can be very common, especially when we using multi cmake files try
> to make the whole project into small ones, in each cmake files someone
> maybe just using the same resources file name like res.qrc which is
> located in the sub module resources folder.
> 
>qt4_add_resources(app_source_res res.qrc)
> 
> so, if they try to do this, and in the last add ${app_source_res} to the
> dependency list using:
> 
>   add_executable(project_name ${app_source_res} ...)
> 
> but in reality they just add one resources file, but CMake do not report
> any error or warning.
> 
> From the source of Qt4Macros we can see:
> 
> line 211:   get_filename_component(outfilename ${it} NAME_WE)
> line 244:   ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
> 
> 
> became we just using NAME_WE as the output file, if two files with same
> file name, one will overwrite the other, and this is the reason why the
> error
> will happen.
> 
> To fix this, I view the whole Qt4Macros source file, find a function
> QT4_MAKE_OUTPUT_FILE already exist to do something just what we
> need. so I work out a patch add two line code and remove two, and it works
> good to me, and I think this might fix the problem.
> 
> Please view this patch, thanks :)


Back on list with a more concrete example, and also to prevent others from 
merging this patch, because I don't think this patch should be accepted.  The 
random string breaks using the Q_INIT_RESOURCE() macro.


For example:
===
project(qrc)

find_package(Qt4)
include(${QT_USE_FILE})

qt4_add_resources(qrc_srcs ${CMAKE_CURRENT_SOURCE_DIR}/my.qrc)

add_library(qrc STATIC ${qrc_srcs})

add_executable(main main.cpp)
target_link_libraries(main qrc)


main.cpp has:
int main()
{
  Q_INIT_RESOURCE(my);
}

With the patch applied, I now get the link error:

main.cpp:(.text+0x5): undefined reference to `qInitResources_my()'

"my" comes from the basename of my.qrc, and is the name used for the resource.
With CMake generating a random name, there would be no way to reference that 
name when calling Q_INIT_RESOURCE.

I would prefer allowing the caller to pass in an alternate -name option for 
rcc, as I said in my first review.  With that, the caller would be able to pass 
a random string.

Clint

-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers


[cmake-developers] [PATCH] Qt4Macros generate resources with same file name

2015-11-23 Thread Joseph Shen
Dear CMake developers:

Please view attached small patch that try to fix Qt4Macros generate
resources with same file name error.

Right now, in the CMake main branch, using cmake with Qt4 library
add resources project can be done like this:

 qt4_add_resources(app_source_res res_a.qrc)
 qt4_add_resources(app_source_res res_b.qrc)

and above two line added two resource file, but if we try to add resource
file with same name, a very subtle error will happen: only one file will
be compile the as resources, and the other was totally ignored.

In some big projects, using the same file name as resource file name
can be very common, especially when we using multi cmake files try
to make the whole project into small ones, in each cmake files someone
maybe just using the same resources file name like res.qrc which is
located in the sub module resources folder.

   qt4_add_resources(app_source_res res.qrc)

so, if they try to do this, and in the last add ${app_source_res} to the
dependency list using:

  add_executable(project_name ${app_source_res} ...)

but in reality they just add one resources file, but CMake do not report
any error or warning.

>From the source of Qt4Macros we can see:

line 211:   get_filename_component(outfilename ${it} NAME_WE)
line 244:   ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}


became we just using NAME_WE as the output file, if two files with same
file name, one will overwrite the other, and this is the reason why the
error
will happen.

To fix this, I view the whole Qt4Macros source file, find a function
QT4_MAKE_OUTPUT_FILE already exist to do something just what we
need. so I work out a patch add two line code and remove two, and it works
good to me, and I think this might fix the problem.

Please view this patch, thanks :)


0001-fix-qt4-generater-resource-file-with-same-name-bug.patch
Description: Binary data
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers