我正在尝试解决库安装在错误位置的 makefile 问题。 makefile 是别人写的,修复起来并不容易。我正在尝试在安装库后移动它们。安装包括 BSD、Linux 和 Solaris 上的权限、符号链接。
给定 a prefix
of/usr/local
和libdir
of /usr/local/lib/64/
,makefile 将工件放置在libdir
underprefix
而不是视为libdir
绝对路径。以下是正在进行的复制的一部分:
cp libcrypto.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/libssl.pc
cp openssl.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/openssl.pc
/usr/local//usr/local/*
我认为获取并移动整个工件树会相对容易,/usr/local
但事实证明它比我想象的要棘手。
我尝试了几种移动目录的建议,包括如何通过 mv 命令移动所有文件和文件夹和在 Linux 上递归移动文件和文件夹。每个都遇到了小问题,例如重新定位/usr/local/lib/64/64/pkgconfig/openssl.pc
和不保留符号链接。
看看Linuxmv(1)
手册页我什至不确定是否有任何保证保留目录中存在的权限和符号链接。波西克斯mv
命令讨论了一些关于权限的内容,但它是在写入目标目录的上下文中进行的。
我还尝试剥离路径组件,${filename:$prefix}
但它导致了符号链接的问题。${filename:$prefix}
可能不是 Posix,但我有 Bash。
我的问题是,是否可以在 BSD、Linux、OS X 和 Solaris 上移植它?如果是这样,那么我应该怎么做呢?
这是我拼凑在一起的代码,但感觉它是错误的:
# Fix OpenSSL's broken directory structure
path="$PREFIX/$LIBDIR"
while [ $(echo "$path" | cut -c1-3) != "lib" ]
do
echo "PATH: $path"
path=${path#*/}
done
echo "PATH: $path"
这是输出:
PATH: /usr/local//usr/local/lib/64
PATH: usr/local//usr/local/lib/64
PATH: local//usr/local/lib/64
PATH: /usr/local/lib/64
PATH: usr/local/lib/64
PATH: local/lib/64
PATH: lib/64
其次是:
cd "$PREFIX/$PREFIX"
mv "$path" "$PREFIX"
rm -rf "$PREFIX/$PREFIX"
答案1
我认为我的建议是将其保留在适当的位置,然后在/usr/local/lib/
该目录的链接中创建一个链接/usr/local/lib/64/
。
例如:
$ tree usr/
usr/
└── local
├── lib
│ └── 64 -> ../usr/local/lib/64
└── usr
└── local
└── lib
└── 64
└── pkgconfig
我是这样做的:
$ cd /usr/local/lib/
$ ln -s ../usr/local/lib/64 64
这在一定程度上使树正常化,因此可以正常工作:
$ ls usr/local/lib/64/
pkgconfig