Skip to content

Instantly share code, notes, and snippets.

@kodo-pp
Created July 2, 2019 23:58
Show Gist options
  • Save kodo-pp/482bef5afbece8bdb3c01bac461b1e03 to your computer and use it in GitHub Desktop.
Save kodo-pp/482bef5afbece8bdb3c01bac461b1e03 to your computer and use it in GitHub Desktop.
~/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