# HG changeset patch # User SokoL_SD # Date 1242575607 0 # Node ID eb3b5bbffc8f935d16ff017b21144eb1bab3f570 # Parent 691e68637348b56417912d54544734e265abcc49 CMake: generator is not running multiple times. generator: packages can have dependencies now (but this do not used in real code yet). diff -r 691e68637348 -r eb3b5bbffc8f CMakeLists.txt --- a/CMakeLists.txt Sun May 17 12:41:14 2009 +0000 +++ b/CMakeLists.txt Sun May 17 15:53:27 2009 +0000 @@ -53,6 +53,13 @@ message(FATAL_ERROR "D compliler not founded") endif (DC) +# find_program(DC_TMP ${DC}) +# mark_as_advanced(DC_TMP) +# string(REGEX MATCH "([A-Za-z\\.0-9/_\\ ]+)(/bin)/[A-Za-z\\.0-9/_\\ ]+" "\\1" dc_path "${DC_PATH}") +# if(NOT "${DC_TMP}" STREQUAL "${dc_path}") +# set(CMAKE_INSTALL_PREFIX ${dc_path}) +# endif(NOT "${DC_TMP}" STREQUAL "${dc_path}") + if(D_IS_MARS) option(SINGLE_D_OBJECT "Build all d sources to one object file" "ON") elseif(D_IS_LLVM) @@ -322,7 +329,6 @@ file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib) add_custom_target(allpackages ALL) link_directories(${CMAKE_BINARY_DIR}/CMakeFiles) -#add_dgen_target(all ${packages}) foreach(package_big ${all_packages}) string(TOLOWER ${package_big} package) @@ -345,7 +351,7 @@ set(all_req_found 1) string(TOUPPER ${package} package_upper) - option(BUILD_QT_${package_upper} "Build Qt${package}" "ON") + option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON") if(BUILD_QT_${package_upper}) foreach(req ${required}) set(req_found) @@ -547,12 +553,11 @@ add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) endif(GENERATE_DI_FILES) +add_subdirectory(generator) ## Dependences. foreach(package ${packages}) add_dependencies(cpp_${package} dgen) endforeach(package ${packages}) - -add_subdirectory(generator) add_sources_for_generating(${files_for_gen}) ##-------------------------------------------- diff -r 691e68637348 -r eb3b5bbffc8f build/opengl.txt --- a/build/opengl.txt Sun May 17 12:41:14 2009 +0000 +++ b/build/opengl.txt Sun May 17 15:53:27 2009 +0000 @@ -9,5 +9,5 @@ ) if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) set(link_example opengl32 glu32) - install(FILES ${link_example} DESTINATION lib) + install(FILES lib/opengl32.lib lib/glu32.lib DESTINATION lib) endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) \ No newline at end of file diff -r 691e68637348 -r eb3b5bbffc8f generator/CMakeLists.txt --- a/generator/CMakeLists.txt Sun May 17 12:41:14 2009 +0000 +++ b/generator/CMakeLists.txt Sun May 17 15:53:27 2009 +0000 @@ -245,44 +245,67 @@ endforeach(package ${packages}) file(APPEND ${dgen_build_conf} "\n") -# foreach(dgen_impl ${files_for_gen}) -# add_custom_command(OUTPUT ${dgen_impl} -# COMMAND ${CMAKE_COMMAND} -E remove -f ${dgen_impl} -# COMMAND "generator" -# ARGS ${GEN_OPT} --qt-include-directory=${QT_INCLUDE_DIR} --output-directory=${CMAKE_BINARY_DIR} -# --source-directory=${CMAKE_SOURCE_DIR}/generator -# qtjambi_masterinclude.h -# ${dgen_build_conf} -# COMMENT "Generating binding..." -# DEPENDS generator ${gen_typesystem} ${gen_sources} -# ) -# endforeach(dgen_impl ${files_for_gen}) -add_custom_target(dgen COMMENT "") +# macro(add_sources_for_generating) +# set(parameters_list_file ${CMAKE_BINARY_DIR}/CMakeFiles/dgen_parameters) +# if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) +# file(REMOVE ${parameters_list_file}) +# foreach(arg ${ARGN}) +# file(APPEND ${parameters_list_file} "${arg}\n") +# endforeach(arg) +# set(param @${parameters_list_file}) +# elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux) +# set(param ${parameters}) +# endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) +# foreach(dgen_impl ${ARGN}) +# add_custom_command(OUTPUT ${dgen_impl} +# COMMAND ${CMAKE_COMMAND} -E remove -f ${param} +# COMMAND "generator" +# ARGS ${GEN_OPT} --qt-include-directory=${QT_INCLUDE_DIR} --output-directory=${CMAKE_BINARY_DIR} +# --source-directory=${CMAKE_SOURCE_DIR}/generator +# qtjambi_masterinclude.h +# ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt +# COMMENT "Generating binding..." +# DEPENDS generator ${gen_typesystem} ${gen_sources} +# ) +# endforeach(dgen_impl ${ARGN}) +# add_custom_target(dgen DEPENDS ${ARGN}) +# endmacro(add_sources_for_generating) -macro(add_sources_for_generating) - set(parameters_list_file ${CMAKE_BINARY_DIR}/CMakeFiles/dgen_parameters) - if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) - file(REMOVE ${parameters_list_file}) - foreach(arg ${ARGN}) - file(APPEND ${parameters_list_file} "${arg}\n") - endforeach(arg) - set(param @${parameters_list_file}) - elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux) - set(param ${parameters}) - endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) - foreach(dgen_impl ${ARGN}) +set(gen_sources) +foreach(package ${packages}) + set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}.xml) + find_file(d_inc_file_found typesystem_${package}-java.java PATHS ${CMAKE_SOURCE_DIR}/generator/) + if(d_inc_file_found) + set(${CMAKE_SOURCE_DIR}/generator/typesystem_${package}-java.java) + endif(d_inc_file_found) +endforeach(package ${packages}) +mark_as_advanced(d_inc_file_found) +set(d_inc_file_found 1) + +foreach(package ${packages}) + set(dgen_impl ${CMAKE_BINARY_DIR}/cpp/qt_${package}/qt_${package}.pri) + break(package ${packages}) +endforeach(package ${packages}) - add_custom_command(OUTPUT ${dgen_impl} - COMMAND ${CMAKE_COMMAND} -E remove -f ${param} - COMMAND "generator" - ARGS ${GEN_OPT} --qt-include-directory=${QT_INCLUDE_DIR} --output-directory=${CMAKE_BINARY_DIR} - --source-directory=${CMAKE_SOURCE_DIR}/generator - qtjambi_masterinclude.h - ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt - COMMENT "Generating binding..." - DEPENDS generator ${gen_typesystem} ${gen_sources} - ) - #add_custom_target(${target_name} DEPENDS ${dgen_impl}) - #add_dependencies(dgen ${target_name}) - endforeach(dgen_impl ${ARGN}) +add_custom_command(OUTPUT ${dgen_impl} + COMMAND ${CMAKE_COMMAND} -E remove -f ${dgen_impl} + COMMAND "generator" + ARGS ${GEN_OPT} --qt-include-directory=${QT_INCLUDE_DIR} --output-directory=${CMAKE_BINARY_DIR} + --source-directory=${CMAKE_SOURCE_DIR}/generator + qtjambi_masterinclude.h + ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt + COMMENT "Generating binding..." + DEPENDS generator ${gen_sources} + ) +add_custom_target(dgen DEPENDS ${dgen_impl} COMMENT "") + +macro(add_sources_for_generating) + foreach(source ${ARGN}) + add_custom_command(OUTPUT "${source}" + COMMAND "" + ARGS "" + DEPENDS ${dgen_impl} + COMMENT "" + ) + endforeach(source ${ARGN}) endmacro(add_sources_for_generating) \ No newline at end of file diff -r 691e68637348 -r eb3b5bbffc8f generator/abstractmetalang.h --- a/generator/abstractmetalang.h Sun May 17 12:41:14 2009 +0000 +++ b/generator/abstractmetalang.h Sun May 17 15:53:27 2009 +0000 @@ -843,6 +843,7 @@ void setTypeAlias(bool typeAlias) { m_is_type_alias = typeAlias; } bool isTypeAlias() const { return m_is_type_alias; } + const QStringList &depends() { return m_type_entry->depends(); } private: uint m_namespace : 1; uint m_qobject : 1; diff -r 691e68637348 -r eb3b5bbffc8f generator/typesystem.cpp --- a/generator/typesystem.cpp Sun May 17 12:41:14 2009 +0000 +++ b/generator/typesystem.cpp Sun May 17 15:53:27 2009 +0000 @@ -95,6 +95,7 @@ SimpleMask = 0xf00, // qtd stuff AddClass = 0x1100, + PackageDepend = 0x1200, // Code snip tags (0x1000, 0x2000, ... , 0xf000) InjectCode = 0x1000, @@ -181,6 +182,8 @@ // qtd tagNames["add-class"] = StackElement::AddClass; tagNames["store-result"] = StackElement::StoreResult; + + tagNames["package-depend"] = StackElement::PackageDepend; } bool startElement(const QString &namespaceURI, const QString &localName, @@ -217,6 +220,7 @@ QHash tagNames; QString m_source_dir; + QStringList m_defaultDepends; }; bool Handler::error(const QXmlParseException &e) @@ -565,6 +569,7 @@ element->entry = m_current_enum; m_current_enum->setCodeGeneration(m_generate); m_current_enum->setTargetLangPackage(m_defaultPackage); + //m_current_enum->setDepends(m_defaultDepends); // For enums its not needed? m_current_enum->setUpperBound(attributes["upper-bound"]); m_current_enum->setLowerBound(attributes["lower-bound"]); m_current_enum->setForceInteger(convertBoolean(attributes["force-integer"], "force-integer", false)); @@ -633,6 +638,7 @@ ComplexTypeEntry *ctype = static_cast(element->entry); ctype->setTargetLangPackage(attributes["package"]); + //ctype->setDepends(m_defaultDepends); ctype->setDefaultSuperclass(attributes["default-superclass"]); ctype->setGenericClass(convertBoolean(attributes["generic-class"], "generic-class", false)); @@ -683,7 +689,10 @@ // ctype->setInclude(Include(Include::IncludePath, ctype->name())); ctype = ctype->designatedInterface(); if (ctype != 0) + { ctype->setTargetLangPackage(attributes["package"]); + ctype->setDepends(m_defaultDepends); + } } break; default: @@ -701,7 +710,8 @@ || element->type == StackElement::Rejection || element->type == StackElement::LoadTypesystem || element->type == StackElement::InjectCode - || element->type == StackElement::Template; + || element->type == StackElement::Template + || element->type == StackElement::PackageDepend; if (!topLevel && current->type == StackElement::Root) { m_error = QString("Tag requires parent: '%1'").arg(tagName); @@ -819,6 +829,9 @@ case StackElement::AddClass: attributes["name"] = QString(); break; + case StackElement::PackageDepend: + attributes["package"] = QString(); + break; default: ; // nada }; @@ -1444,6 +1457,16 @@ } element->parent->value.templateInstance->addReplaceRule(attributes["from"],attributes["to"]); break; + case StackElement::PackageDepend: + { + QString package = attributes["package"]; + if (package.isEmpty()) { + m_error = "bad package depend entry"; + return false; + } + m_defaultDepends << package; + } + break; default: break; // nada }; diff -r 691e68637348 -r eb3b5bbffc8f generator/typesystem.h --- a/generator/typesystem.h Sun May 17 12:41:14 2009 +0000 +++ b/generator/typesystem.h Sun May 17 15:53:27 2009 +0000 @@ -879,6 +879,9 @@ bool isAbstract() const { return m_isAbstract; } void setAbstract(bool isAbstract) { m_isAbstract = isAbstract; } + void setDepends(const QStringList &depends) {m_depends = depends; } + const QStringList &depends() {return m_depends; } + QString addedTo; QStringList includedClasses; @@ -908,6 +911,7 @@ // qtd bool m_isStructInD; bool m_isAbstract; + QStringList m_depends; }; class ContainerTypeEntry : public ComplexTypeEntry diff -r 691e68637348 -r eb3b5bbffc8f generator/typesystem_gui.xml --- a/generator/typesystem_gui.xml Sun May 17 12:41:14 2009 +0000 +++ b/generator/typesystem_gui.xml Sun May 17 15:53:27 2009 +0000 @@ -1,5 +1,6 @@ + qt.Utilities.loadQtLibrary("QtGui"); diff -r 691e68637348 -r eb3b5bbffc8f generator/typesystem_opengl.xml --- a/generator/typesystem_opengl.xml Sun May 17 12:41:14 2009 +0000 +++ b/generator/typesystem_opengl.xml Sun May 17 15:53:27 2009 +0000 @@ -2,6 +2,8 @@ + + qt.Utilities.loadQtLibrary("QtGui"); qt.Utilities.loadQtLibrary("QtOpenGL");