将 SQLite 3.8.1 从 Trusty 反向移植到 Ubuntu Precise 的问题

将 SQLite 3.8.1 从 Trusty 反向移植到 Ubuntu Precise 的问题

我对所有 Ubuntu 应用程序的打包等都很陌生,所以这里可能不是提出这个问题的正确地方,或者可能有更合适的地方重新提出这个问题。如果确实如此,我很乐意重定向。

我希望反向移植 3.8.1-1ubuntu3 以实现精确运行。

我按照以下说明进行操作http://architects.dzone.com/articles/how-backport-packages-ubuntu并且它们运行完美,只是似乎存在一些依赖问题,阻碍了它们的正常构建。

您可以在以下站点查看完整的构建日志。 https://launchpad.net/~peter64/+archive/ppa/+build/5342072(amd64 构建)这个问题太长了,无法包含在内。

失败的部分如下。

...
tcl8.4: already deinstalled
tcl8.4-dev: already deinstalled
Checking for source dependency conflicts...
  /usr/bin/sudo /usr/bin/apt-get --purge $CHROOT_OPTIONS -q -y install debhelper autoconf libtool automake autotools-dev chrpath libreadline-dev tcl8.5-dev dh-autoreconf
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  bsdmainutils dh-apparmor file gettext gettext-base groff-base html2text
  intltool-debian libcroco3 libgettextpo0 libmagic1 libpipeline1
  libreadline6-dev libtinfo-dev libunistring0 libxml2 m4 man-db po-debconf
  tcl8.5
Suggested packages:
  autoconf2.13 autoconf-archive gnu-standards autoconf-doc wamerican wordlist
  whois vacation dh-make gettext-doc groff libtool-doc automaken gfortran
  fortran95-compiler gcj less www-browser libmail-box-perl tclreadline
  tcl8.5-doc
Recommended packages:
  autopoint curl wget lynx-cur libltdl-dev xml-core libmail-sendmail-perl
The following NEW packages will be installed:
  autoconf automake autotools-dev bsdmainutils chrpath debhelper dh-apparmor
  dh-autoreconf file gettext gettext-base groff-base html2text intltool-debian
  libcroco3 libgettextpo0 libmagic1 libpipeline1 libreadline-dev
  libreadline6-dev libtinfo-dev libtool libunistring0 libxml2 m4 man-db
  po-debconf tcl8.5 tcl8.5-dev
0 upgraded, 29 newly installed, 0 to remove and 0 not upgraded.
...
./configure --prefix=/usr --mandir="/usr/share/man" \
      --build x86_64-linux-gnu --with-tcl=/usr/lib/x86_64-linux-gnu/tcl8.5 --enable-threadsafe \
      --enable-load-extension \
      --libdir=\${prefix}/lib/x86_64-linux-gnu \
      --libexecdir=\${libdir}/sqlite3 \
      TCLLIBDIR=/usr/lib/tcltk/sqlite3 \
      `if (echo  | grep -q debug) then echo "--enable-debug"; else echo ""; fi`
...
checking for Tcl configuration... configure: error: /usr/lib/x86_64-linux-gnu/tcl8.5 directory doesn't contain tclConfig.sh
make: *** [configure-stamp] Error 1

似乎它正在尝试使用不可用的 tcl 版本,我需要更改哪个文件才能进行此构建,因为依赖项似乎指示它正确使用 tcl8.5,并且构建器在尝试构建之前将 tcl8.4 native 删除为 precise。但随后它找不到它。

另一块可能感兴趣的相关代码是 sqlite3_3.8.1-1ubuntu3/debian/rules。

ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  confflags += --build $(DEB_HOST_GNU_TYPE) --with-tcl=/usr/lib/$(DEB_HOST_MULTIARCH)/tcl8.5
  export CROSS_BUILDING=no
else
  confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) --with-tcl=/usr/lib/$(DEB_HOST_MULTIARCH)/tcl8.5 LDFLAGS=-L/usr/lib/$(DEB_HOST_MULTIARCH)
  export CROSS_BUILDING=yes
endif


#export DEB_CFLAGS_MAINT_APPEND = -O2 -fno-strict-aliasing
export CFLAGS += -O2 -fno-strict-aliasing \
        -DSQLITE_SECURE_DELETE -DSQLITE_ENABLE_COLUMN_METADATA \
        -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_SOUNDEX=1 \
        -DSQLITE_ENABLE_UNLOCK_NOTIFY \
        -DSQLITE_OMIT_LOOKASIDE=1 \
        -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 \
        -DSQLITE_MAX_SCHEMA_RETRY=25 \
        -DSQLITE_MAX_VARIABLE_NUMBER=250000

configure: configure-stamp
configure-stamp:
        dh_testdir
        dh_autoreconf
        dh_autotools-dev_updateconfig
        ./configure --prefix=/usr --mandir="/usr/share/man" \
          $(confflags) --enable-threadsafe \
          --enable-load-extension \
          --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \
          --libexecdir=\$${libdir}/sqlite3 \
          TCLLIBDIR=/usr/lib/tcltk/sqlite3 \
          $(DDEBUG)

        # remove double -ldl from sqlite3.pc
        sed -i "s/\([-ldl .+]\) -ldl/\1/" sqlite3.pc

        touch $@

查看库 3.7.9-2ubuntu1.1/debian/rules 的精确版本,好像该行。

confflags += --build $(DEB_HOST_GNU_TYPE) --with-tcl=/usr/lib/$(DEB_HOST_MULTIARCH)/tcl8.5

需要改回

confflags += --build $(DEB_HOST_GNU_TYPE) --with-tcl=/usr/lib/tcl8.5

基于较早的精确文件包含的事实

ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  confflags += --build $(DEB_HOST_GNU_TYPE) --with-tcl=/usr/lib/tcl8.5
  export CROSS_BUILDING=no
else
  confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) --with-tcl=/usr/$(DEB_HOST_GNU_TYPE)/lib/tcl8.5 LDFLAGS=-L/usr/$(DEB_HOST_GNU_TYPE)/lib 
  export CROSS_BUILDING=yes
endif

使用 backportpackage(可自动执行整个过程)进行原始构建后,我不确定 1) 上述修复是否真的能解决问题。2) 如何将上述修复应用于单个文件,重新打包并将其全部作为 backport 提交以供批准。如能提供任何有关如何完成此操作的指导,我将不胜感激。

如果您需要任何进一步的信息,请随时询问,我会提供。谢谢!

相关内容