Re: [cmake-developers] [PATCH] Qt4Macros generate resources with same file name
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 Stimpsonwrote: > 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
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
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