From 4cd0d02536eef6edb35b127513590891e5d93fba Mon Sep 17 00:00:00 2001 From: Duncan Mac-Vicar P Date: Fri, 23 Feb 2007 14:49:05 +0000 Subject: [PATCH] - gettext support everything works except I cant make %{find_lang} to work as advertised - backup changes to DESIGN --- CMakeLists.txt | 14 +-- cmake/modules/FindGettext.cmake | 121 +++++++++++---------- configure.ac | 1 + devel/devel.dmacvicar/Makefile.am | 4 +- .../{sqlite-time.cc => sqlitetime.cc} | 0 libzypp.spec.cmake | 18 +-- tools/package-manager/CMakeLists.txt | 6 +- zypp/CMakeLists.txt | 2 +- zypp/parser/Makefile.am | 3 +- zypp2/cache/DESIGN | 6 + zypp2/cache/schema/schema.sql | 19 +++- zypp2/cache/schema/schema_filelist2.sql | 6 +- 12 files changed, 113 insertions(+), 87 deletions(-) rename devel/devel.dmacvicar/{sqlite-time.cc => sqlitetime.cc} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c53822..469ebb6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ SET( PACKAGE "libzypp" ) SET( VERSION "${LIBZYPP_MAJOR}.${LIBZYPP_MINOR}.${LIBZYPP_PATCH}" ) ADD_DEFINITIONS( -DVERSION=\\\"${VERSION}\\\" ) -SET( LIBZYPP_VERSION_INFO "-version-info ${LIBZYPP_CURRENT}:${LIBZYPP_PATCH}:${LIBZYPP_AGE}" ) +SET( LIBZYPP_VERSION_INFO "${LIBZYPP_CURRENT}.${LIBZYPP_PATCH}.${LIBZYPP_AGE}" ) SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Novell's package management core engine.") @@ -33,10 +33,8 @@ SET( CPACK_SOURCE_PACKAGE_FILE_NAME "${PACKAGE}-${VERSION}" ) # in absolute path + filename to find files or directories to be excluded # from source tarball. SET (CPACK_SOURCE_IGNORE_FILES -"/CVS/;/.svn/;/.libs/;/.deps/;.swp$;.#;/#;/build/;.o$;.lo$;.la$" -"~$" -"\\\\.cvsignore$" -"Makefile\\\\.in$" +#/CVS/;/\\.svn/;/\\.libs/;/\\.deps/;\\.swp$;/build/;\\.o$;\\.lo$;\\.la$;~$;\\\\.cvsignore$;Makefile\\\\.in$; +/CVS/;/\\\\.svn/;/\\\\.libs/;/\\\\.deps/;\\\\.swp$;/build/;\\\\.o$;\\\\.lo$;\\\\.la$;~$ ) INCLUDE(CPack) @@ -53,6 +51,8 @@ SET( DOC_INSTALL_DIR #################################################################### +FIND_PACKAGE(Gettext REQUIRED) + FIND_PACKAGE(Rpm REQUIRED) IF ( NOT RPM_FOUND) MESSAGE( FATAL_ERROR " rpm not found" ) @@ -172,9 +172,9 @@ ADD_SUBDIRECTORY( zypp ) ADD_SUBDIRECTORY( zypp2 ) # do not build devel by default ADD_SUBDIRECTORY( devel EXCLUDE_FROM_ALL ) -ADD_SUBDIRECTORY( tools EXCLUDE_FROM_ALL ) +ADD_SUBDIRECTORY( tools ) #ADD_SUBDIRECTORY( examples ) -#ADD_SUBDIRECTORY( po ) +ADD_SUBDIRECTORY( po EXCLUDE_FROM_ALL ) ADD_SUBDIRECTORY( doc EXCLUDE_FROM_ALL ) #################################################################### diff --git a/cmake/modules/FindGettext.cmake b/cmake/modules/FindGettext.cmake index e4dda70..5538950 100644 --- a/cmake/modules/FindGettext.cmake +++ b/cmake/modules/FindGettext.cmake @@ -1,61 +1,62 @@ -# Try to find Gettext functionality -# Once done this will define +# - Find GNU gettext tools +# This module looks for the GNU gettext tools. This module defines the +# following values: +# GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. +# GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. +# GETTEXT_FOUND: True if gettext has been found. # -# GETTEXT_FOUND - system has Gettext -# GETTEXT_INCLUDE_DIR - Gettext include directory -# GETTEXT_LIBRARIES - Libraries needed to use Gettext - -# TODO: This will enable translations only if Gettext functionality is -# present in libc. Must have more robust system for release, where Gettext -# functionality can also reside in standalone Gettext library, or the one -# embedded within kdelibs (cf. gettext.m4 from Gettext source). - -if (LIBC_HAS_DGETTEXT OR LIBINTL_HAS_DGETTEXT) - - # in cache already - SET(GETTEXT_FOUND TRUE) - -else (LIBC_HAS_DGETTEXT OR LIBINTL_HAS_DGETTEXT) - - include(CheckIncludeFiles) - include(CheckLibraryExists) - include(CheckFunctionExists) - - check_include_files(libintl.h HAVE_LIBINTL_H) - - set(GETTEXT_INCLUDE_DIR) - set(GETTEXT_LIBRARIES) - - if (HAVE_LIBINTL_H) - check_function_exists(dgettext LIBC_HAS_DGETTEXT) - if (LIBC_HAS_DGETTEXT) - set(GETTEXT_SOURCE "built in libc") - set(GETTEXT_FOUND TRUE) - else (LIBC_HAS_DGETTEXT) - FIND_LIBRARY(LIBINTL_LIBRARY NAMES intl libintl - PATHS - /usr/lib - /usr/local/lib - ) - CHECK_LIBRARY_EXISTS(${LIBINTL_LIBRARY} "dgettext" "" LIBINTL_HAS_DGETTEXT) - if (LIBINTL_HAS_DGETTEXT) - set(GETTEXT_SOURCE "in ${LIBINTL_LIBRARY}") - set(GETTEXT_LIBRARIES ${LIBINTL_LIBRARY} CACHE FILEPATH "path to libintl library, used for gettext") - set(GETTEXT_FOUND TRUE) - endif (LIBINTL_HAS_DGETTEXT) - endif (LIBC_HAS_DGETTEXT) - endif (HAVE_LIBINTL_H) - - if (GETTEXT_FOUND) - if (NOT Gettext_FIND_QUIETLY) - message(STATUS "Found Gettext: ${GETTEXT_SOURCE}") - endif (NOT Gettext_FIND_QUIETLY) - else (GETTEXT_FOUND) - if (Gettext_FIND_REQUIRED) - message(STATUS "Could NOT find Gettext") - endif (Gettext_FIND_REQUIRED) - endif (GETTEXT_FOUND) - - MARK_AS_ADVANCED(GETTEXT_INCLUDE_DIR GETTEXT_LIBRARIES) - -endif (LIBC_HAS_DGETTEXT OR LIBINTL_HAS_DGETTEXT) +# Additionally it provides the following macros: +# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN ) +# This will create a target "translations" which will convert the +# given input po files into the binary output mo file. If the +# ALL option is used, the translations will also be created when +# building the default target. + +FIND_PROGRAM(GETTEXT_MSGMERGE_EXECUTABLE msgmerge) + +FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) + +MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFile) + + SET(_gmoFiles) + GET_FILENAME_COMPONENT(_potBasename ${_potFile} NAME_WE) + GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) + + MESSAGE( STATUS "pot: ${_potFile} converted to ${_potBasename}") + + SET(_addToAll) + IF(${_firstPoFile} STREQUAL "ALL") + SET(_addToAll "ALL") + SET(_firstPoFile) + ENDIF(${_firstPoFile} STREQUAL "ALL") + + FOREACH (_currentPoFile ${ARGN}) + GET_FILENAME_COMPONENT(_absFile ${_currentPoFile} ABSOLUTE) + GET_FILENAME_COMPONENT(_abs_PATH ${_absFile} PATH) + GET_FILENAME_COMPONENT(_lang ${_absFile} NAME_WE) + SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) + + ADD_CUSTOM_COMMAND( + OUTPUT ${_gmoFile} + COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile} + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile} + DEPENDS ${_absPotFile} ${_absFile} + ) + + INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) + SET(_gmoFiles ${_gmoFiles} ${_gmoFile}) + + ENDFOREACH (_currentPoFile ) + + ADD_CUSTOM_TARGET(translations ${_addToAll} DEPENDS ${_gmoFiles}) + +ENDMACRO(GETTEXT_CREATE_TRANSLATIONS ) + +IF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) + SET(GETTEXT_FOUND TRUE) +ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) + SET(GETTEXT_FOUND FALSE) + IF (GetText_REQUIRED) + MESSAGE(FATAL_ERROR "GetText not found") + ENDIF (GetText_REQUIRED) +ENDIF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) \ No newline at end of file diff --git a/configure.ac b/configure.ac index 0d82e0d..f22371a 100644 --- a/configure.ac +++ b/configure.ac @@ -250,6 +250,7 @@ AC_OUTPUT( po/Makefile.in\ zypp/parser/yum2/Makefile \ zypp/parser/yum/schema/Makefile \ zypp/parser/tagfile/Makefile \ + zypp/parser/taggedfile/Makefile \ zypp/parser/xmlstore/Makefile \ zypp/parser/xmlstore/schema/Makefile \ zypp/pool/Makefile \ diff --git a/devel/devel.dmacvicar/Makefile.am b/devel/devel.dmacvicar/Makefile.am index 6d4fbfb..e5b7b8f 100644 --- a/devel/devel.dmacvicar/Makefile.am +++ b/devel/devel.dmacvicar/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to produce Makefile.in ## ################################################## -noinst_PROGRAMS = test lock testbed aj yumparser media tag sqlite-time +noinst_PROGRAMS = test lock testbed aj yumparser media tag sqlitetime ## ################################################## @@ -15,7 +15,7 @@ LDADD = -L$(top_srcdir)/zypp/.libs -L$(top_srcdir)/zypp2/.libs -lzypp -lzypp2 - ## ################################################## -sqlitetime_SOURCES = sqlite-time.cc +sqlitetime_SOURCES = sqlitetime.cc sqlitetime_LDFLAGS = -static media_SOURCES = media-glob.cc diff --git a/devel/devel.dmacvicar/sqlite-time.cc b/devel/devel.dmacvicar/sqlitetime.cc similarity index 100% rename from devel/devel.dmacvicar/sqlite-time.cc rename to devel/devel.dmacvicar/sqlitetime.cc diff --git a/libzypp.spec.cmake b/libzypp.spec.cmake index 63afe55..1ad7b01 100644 --- a/libzypp.spec.cmake +++ b/libzypp.spec.cmake @@ -78,15 +78,19 @@ cd build cmake -DCMAKE_INSTALL_PREFIX=%{prefix} -DCMAKE_SKIP_RPATH=1 .. CXXFLAGS="$RPM_OPT_FLAGS" \ make %{?jobs:-j %jobs} +make -C doc/autodoc %{?jobs:-j %jobs} +make -C po %{?jobs:-j %jobs} translations + #make check %install cd build make install DESTDIR=$RPM_BUILD_ROOT -cd .. +make -C doc/autodoc install DESTDIR=$RPM_BUILD_ROOT %suse_update_desktop_file -G "" -C "" package-manager +make -C po %{?jobs:-j %jobs} install DESTDIR=$RPM_BUILD_ROOT # Create filelist with translatins -%{find_lang} zypp +%{find_lang} $RPM_BUILD_ROOT zypp %post @@ -100,8 +104,7 @@ cd .. %files -f zypp.lang %defattr(-,root,root) %{prefix}/lib/zypp -%{prefix}/lib/zypp/* -%dir %{_libdir}/libzypp*so.* +%{_libdir}/libzypp*so.* %dir %{prefix}/share/zypp %dir %{prefix}/share/zypp/schema %{prefix}/share/zypp/schema/* @@ -112,10 +115,9 @@ cd .. %files devel %defattr(-,root,root) -%dir %{_libdir}/libzypp.so -%dir %{_libdir}/libzypp.la -%dir %{_docdir}/zypp -%{_docdir}/zypp/* +%{_libdir}/libzypp.so +#%dir %{_libdir}/libzypp.la +%{_docdir}/%{name} %dir %{prefix}/include/zypp %{prefix}/include/zypp/* %{_libdir}/pkgconfig/libzypp.pc diff --git a/tools/package-manager/CMakeLists.txt b/tools/package-manager/CMakeLists.txt index 1845c15..6526845 100644 --- a/tools/package-manager/CMakeLists.txt +++ b/tools/package-manager/CMakeLists.txt @@ -2,6 +2,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_CUR ########### install files ############### -INSTALL_FILES( ${CMAKE_INSTALL_PREFIX}/share/pixmaps FILES package-manager-icon.png ) -INSTALL(PROGRAMS package-manager package-manager-su DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -INSTALL_FILES( ${CMAKE_INSTALL_PREFIX}/share/applications FILES package-manager.desktop ) +INSTALL(PROGRAMS package-manager package-manager-su DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") +INSTALL( FILES package-manager.desktop DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications" ) +INSTALL( FILES package-manager-icon.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/pixmaps" ) diff --git a/zypp/CMakeLists.txt b/zypp/CMakeLists.txt index 8f57f2b..1a41b8f 100644 --- a/zypp/CMakeLists.txt +++ b/zypp/CMakeLists.txt @@ -992,7 +992,7 @@ ${zypp_pool_HEADERS} ) ADD_LIBRARY(zypp SHARED ${zypp_lib_SRCS}) - +SET_TARGET_PROPERTIES( zypp PROPERTIES VERSION "${LIBZYPP_VERSION_INFO}" ) # System libraries TARGET_LINK_LIBRARIES(zypp boost_filesystem boost_regex util ) TARGET_LINK_LIBRARIES(zypp ${DBUS_LIBRARY} ) diff --git a/zypp/parser/Makefile.am b/zypp/parser/Makefile.am index 6f517b0..2ac99f8 100644 --- a/zypp/parser/Makefile.am +++ b/zypp/parser/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to produce Makefile.in ## ################################################## -SUBDIRS = xml yum2 yum tagfile xmlstore +SUBDIRS = xml yum2 yum tagfile taggedfile xmlstore INCLUDES = -I$(oldincludedir)/libxml2 \ -DZYPP_BASE_LOGGER_LOGGROUP=\"parser\" @@ -33,6 +33,7 @@ lib@PACKAGE@_parser_la_LIBADD = xml/lib@PACKAGE@_parser_xml.la \ -lxml2 \ -lz \ tagfile/lib@PACKAGE@_parser_tagfile.la \ + taggedfile/lib@PACKAGE@_parser_taggedfile.la \ xmlstore/lib@PACKAGE@_parser_xmlstore.la ## ################################################## diff --git a/zypp2/cache/DESIGN b/zypp2/cache/DESIGN index f447586..cb8b2d5 100644 --- a/zypp2/cache/DESIGN +++ b/zypp2/cache/DESIGN @@ -359,6 +359,12 @@ application level cache, for example for the directories, which probably get inserted lot of files for the same directory. You can avoid N selects, keeping the dir_id and name in memory, where N is the average number of files per directory. +This generates a 193M filelist2.db. This includes an index on filenames, otherwise +every insertion requires a select on a non indexed text column. So this size is +comparable to the 259M non-normalized table. + +I could not get the reverse lookup query under a second. + Application level cache for normalized insertions ================================================= diff --git a/zypp2/cache/schema/schema.sql b/zypp2/cache/schema/schema.sql index 340949b..b7b366c 100644 --- a/zypp2/cache/schema/schema.sql +++ b/zypp2/cache/schema/schema.sql @@ -40,6 +40,21 @@ CREATE TABLE names ( , name TEXT UNIQUE ); +CREATE TABLE translated_texts ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL + , text_id INTEGER NOT NULL + , lang_id INTEGER NOT NULL + , text TEXT + +); + +CREATE TABLE resolvable_texts ( + , resolvable_id INTEGER NOT NULL + , text_id INTEGER NOT NULL + , lang_id INTEGER NOT NULL + , field_id INTEGER NOT NULL +) + CREATE TABLE resolvables ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , name TEXT @@ -48,8 +63,8 @@ CREATE TABLE resolvables ( , epoch INTEGER , arch INTEGER , kind INTEGER - , summary TEXT - , description TEXT + , summary_text_id INTEGER + , description_text_id INTEGER , insnotify TEXT , delnotify TEXT , license_to_confirm TEXT diff --git a/zypp2/cache/schema/schema_filelist2.sql b/zypp2/cache/schema/schema_filelist2.sql index 2e99e1a..1ab40e5 100644 --- a/zypp2/cache/schema/schema_filelist2.sql +++ b/zypp2/cache/schema/schema_filelist2.sql @@ -2,7 +2,7 @@ DROP TABLE IF EXISTS files; DROP TABLE IF EXISTS dir; -CREATE TABLE dir ( +CREATE TABLE dirs ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , name TEXT UNIQUE ); @@ -10,7 +10,7 @@ CREATE TABLE dir ( CREATE TABLE files ( dir_id INTEGER NOT NULL REFERENCES dir(id) , package_id INTEGER NOT NULL - , name TEXT UNIQUE - , PRIMARY KEY (package_id, name) + , name TEXT + , PRIMARY KEY (package_id, dir_id, name) ); -- 2.7.4