自定义安装挂钩和 rpmbuild

custom install hook and rpmbuild

我有一个为 build/install/etc 使用 autotools 的包。它是一个用 C++ 编写的 Python 模块。 (这并不重要,只是要知道我必须安装的 python 脚本不是正在构建的脚本的一部分,即它们不是 xxxxx_SOURCES 主脚本。)该模块仅用于一些 "unit tests" 用于我们团队在硬件解决方案中分发的驱动程序。由于各种原因,我需要 "install" 对系统进行 python 单元测试。

由于这些 python 脚本不是模块的一部分,我在 Makefile 中单独管理安装。这是我的 Makefile.am:

EXTRA_DIST = setupenv.sh bootstrap tests

dist-hook:
    rm -rf $$(find $(distdir)/tests -name \*.swp -o -name \*.pyc)


install-exec-hook:
    mkdir -p $(prefix)/unit_tests/unittest2
    for f in tests/*.py; do \
        cp $$f $(prefix)/unit_tests; \
    done

    for f in tests/unittest2/*.py; do \
        cp $$f $(prefix)/unit_tests/unittest2; \
    done

uninstall-hook:
    rm -r $(prefix)/unit_tests

除模块的 rpmbuild 期间外,这工作正常。 install-exec-hook 规则没有正确编写以创建 rpm 进程重定向它的目录。也就是说,当执行 mkdir - $(prefix)/... 时,脚本会尝试创建目录:/opt/oursw/...。应该如何重写此规则,以便 rpmbuild 将它们放在与模块安装相同的位置?

您想添加 $(DESTDIR) 作为所有这些目录的前缀。那是 standard for autotools installs.

顺便说一句,您可能还想查看 _SCRIPTS 后缀,它允许“make install”以 "official" 方式为您复制脚本,删除首先需要这个技巧。