Created
July 2, 2019 23:58
-
-
Save kodo-pp/482bef5afbece8bdb3c01bac461b1e03 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
~/tmp/libelfin/libelfin $ ls | |
dwarf elf examples LICENSE Makefile README.md test | |
~/tmp/libelfin/libelfin $ make -j4 | |
make -C elf | |
make[1]: Entering directory '/home/kodopp/tmp/libelfin/libelfin/elf' | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o elf.o elf.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o mmap_loader.o mmap_loader.cc | |
ln -s libelf++.so.0 libelf++.so | |
python3 enum-print.py -u --hex --no-type --mask shf --mask pf \ | |
-x loos -x hios -x loproc -x hiproc < data.hh >> to_string.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o to_string.o to_string.cc | |
ar rcs libelf++.a elf.o mmap_loader.o to_string.o | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -shared -Wl,-soname,libelf++.so.0 -o libelf++.so.0 elf.o mmap_loader.o to_string.o | |
make[1]: Leaving directory '/home/kodopp/tmp/libelfin/libelfin/elf' | |
make -C dwarf | |
make[1]: Entering directory '/home/kodopp/tmp/libelfin/libelfin/dwarf' | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o dwarf.o dwarf.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o cursor.o cursor.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o die.o die.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o value.o value.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o abbrev.o abbrev.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o expr.o expr.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o rangelist.o rangelist.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o line.o line.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o attrs.o attrs.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o die_str_map.o die_str_map.cc | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o elf.o elf.cc | |
python3 ../elf/enum-print.py < dwarf++.hh >> to_string.cc | |
python3 ../elf/enum-print.py -s _ -u --hex -x hi_user -x lo_user < data.hh >> to_string.cc | |
ln -s libdwarf++.so.0 libdwarf++.so | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -c -o to_string.o to_string.cc | |
ar rcs libdwarf++.a dwarf.o cursor.o die.o value.o abbrev.o expr.o rangelist.o line.o attrs.o die_str_map.o elf.o to_string.o | |
g++ -g -O2 -Werror -std=c++0x -Wall -fPIC -shared -Wl,-soname,libdwarf++.so.0 -o libdwarf++.so.0 dwarf.o cursor.o die.o value.o abbrev.o expr.o rangelist.o line.o attrs.o die_str_map.o elf.o to_string.o | |
make[1]: Leaving directory '/home/kodopp/tmp/libelfin/libelfin/dwarf' | |
~/tmp/libelfin/libelfin $ # Want to create a package. To achieve this, I need to install libraries and headers to some package directory (e.g. ./pkg) | |
~/tmp/libelfin/libelfin $ mkdir pkg | |
~/tmp/libelfin/libelfin $ make PREFIX=/usr DESTDIR="$PWD/pkg" install # When the package is installed, I want files to be installed to $PREFIX. But right now I want them to be installed to a temporary directory ($DESTDIR) | |
make -C elf install | |
make[1]: Entering directory '/home/kodopp/tmp/libelfin/libelfin/elf' | |
install -d /usr/lib/pkgconfig | |
install -t /usr/lib libelf++.a | |
install: cannot create regular file '/usr/lib/libelf++.a': Permission denied | |
make[1]: *** [Makefile:62: install] Error 1 | |
make[1]: Leaving directory '/home/kodopp/tmp/libelfin/libelfin/elf' | |
make: *** [Makefile:6: install] Error 2 | |
~/tmp/libelfin/libelfin $ # Oops, no support for DESTDIR. Let's try just setting PREFIX | |
~/tmp/libelfin/libelfin $ make PREFIX="$PWD/pkg/usr" install | |
make -C elf install | |
make[1]: Entering directory '/home/kodopp/tmp/libelfin/libelfin/elf' | |
install -d /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib/pkgconfig | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib libelf++.a | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib libelf++.so.0 | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib libelf++.so | |
install -d /home/kodopp/tmp/libelfin/libelfin/pkg/usr/include/libelfin/elf | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/include/libelfin/elf common.hh data.hh elf++.hh | |
sed 's,^libdir=.*,libdir=/home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib,;s,^includedir=.*,includedir=/home/kodopp/tmp/libelfin/libelfin/pkg/usr/include,' libelf++.pc \ | |
> /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib/pkgconfig/libelf++.pc | |
make[1]: Leaving directory '/home/kodopp/tmp/libelfin/libelfin/elf' | |
make -C dwarf install | |
make[1]: Entering directory '/home/kodopp/tmp/libelfin/libelfin/dwarf' | |
install -d /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib/pkgconfig | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib libdwarf++.a | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib libdwarf++.so.0 | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib libdwarf++.so | |
install -d /home/kodopp/tmp/libelfin/libelfin/pkg/usr/include/libelfin/dwarf | |
install -t /home/kodopp/tmp/libelfin/libelfin/pkg/usr/include/libelfin/dwarf data.hh dwarf++.hh small_vector.hh | |
sed 's,^libdir=.*,libdir=/home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib,;s,^includedir=.*,includedir=/home/kodopp/tmp/libelfin/libelfin/pkg/usr/include,' libdwarf++.pc \ | |
> /home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib/pkgconfig/libdwarf++.pc | |
make[1]: Leaving directory '/home/kodopp/tmp/libelfin/libelfin/dwarf' | |
~/tmp/libelfin/libelfin $ # Ok, it worked. But what was written to libelf++.pc? | |
~/tmp/libelfin/libelfin $ cat ./pkg/usr/lib/pkgconfig/libelf++.pc | |
libdir=/home/kodopp/tmp/libelfin/libelfin/pkg/usr/lib | |
includedir=/home/kodopp/tmp/libelfin/libelfin/pkg/usr/include | |
Name: libelf++ | |
Description: C++11 ELF library | |
Version: 0.1-47-gac45a09 | |
Libs: -L${libdir} -lelf++ | |
Cflags: -I${includedir} | |
~/tmp/libelfin/libelfin $ # As we can see, libdir and includedir in pkg-config file point to the temporary directory, not to the /usr/lib and /usr/include. So when the package is installed, these paths will become invalid. If DESTDIR was supported properly, these values would end up being correct ($PREFIX/lib and $PREFIX/include) provided that PREFIX was set to /usr |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment