mirror of
https://github.com/QuasarApp/pe-parse.git
synced 2025-04-26 04:14:32 +00:00
* CMake: Added install directives * CMake: Added support for find_package(pe-parse) * Fixed a compilation error on Linux * CMake: Fix cmake module installation * Added ArchLinux package * Finished implementing the address converted example * peaddrconv: Print the image base address. * peaddrconv: Enable more warnings. * Update travis to also build the examples * Fix a compilation warning on Ubuntu 14.04 * Travis: Add macOS support. * Better output for Travis, fix a compilation error on macOS. * Travis: Do not build examples under macOS. * Travis: Also compile the python module (pepy) * Readme: Add a section to show how to use the library. * Windows: Fix a compilation error, enable /analyze (see details). The nt-headers.h include file is defining several constexpr values using reserved (by windows.h) names. These names (i.e.: IMAGE_FILE_MACHINE_UNKNOWN) are in fact macros defined inside the Windows header files, and causes the preprocessor to break definitions such as the following one: constexpr std::uint16_t IMAGE_FILE_MACHINE_UNKNOWN = 0x0; The fix (for now) consists in including the nt-headers.h file before windows.h, but we should probably choose whether to use different names or avoid defining those values (since they are inside the system header anyway).
240 lines
5.0 KiB
Bash
Executable File
240 lines
5.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
main() {
|
|
if [ $# -ne 2 ] ; then
|
|
printf "Usage:\n\ttravis.sh <linux|osx> <initialize|build>\n"
|
|
return 1
|
|
fi
|
|
|
|
local platform_name="$1"
|
|
local operation_type="$2"
|
|
|
|
if [[ "${platform_name}" != "osx" && "${platform_name}" != "linux" ]] ; then
|
|
printf "Invalid platform: ${platform_name}\n"
|
|
return 1
|
|
fi
|
|
|
|
if [[ "${operation_type}" == "initialize" ]] ; then
|
|
"${platform_name}_initialize"
|
|
return $?
|
|
|
|
elif [[ "$operation_type" == "build" ]] ; then
|
|
"${platform_name}_build"
|
|
return $?
|
|
|
|
else
|
|
printf "Invalid operation\n"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
get_processor_count() {
|
|
which nproc > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
nproc
|
|
return 0
|
|
fi
|
|
|
|
which sysctl > /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
sysctl -n hw.ncpu
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
linux_initialize() {
|
|
printf "Initializing platform: linux\n"
|
|
local log_file=`mktemp`
|
|
|
|
printf " > Updating the package database..\n"
|
|
sudo apt-get -qq update > "${log_file}" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x The package database could not be updated\n\n\n"
|
|
cat "${log_file}"
|
|
return 1
|
|
fi
|
|
|
|
printf " > Installing the required packages...\n"
|
|
sudo apt-get install -qqy cmake python2.7 python-dev build-essential realpath > "${log_file}" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Could not install the required dependencies\n\n\n"
|
|
cat "${log_file}"
|
|
return 1
|
|
fi
|
|
|
|
printf " > The system has been successfully initialized\n"
|
|
return 0
|
|
}
|
|
|
|
osx_initialize() {
|
|
printf "Initializing platform: macOS\n"
|
|
local log_file=`mktemp`
|
|
|
|
printf " > Updating the package database..\n"
|
|
brew update > "${log_file}" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x The package database could not be updated\n\n\n"
|
|
cat "${log_file}"
|
|
return 1
|
|
fi
|
|
|
|
printf " > Installing CMake...\n"
|
|
brew install cmake > "${log_file}" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Failed to install CMake\n\n\n"
|
|
cat "${log_file}"
|
|
fi
|
|
|
|
printf " > The system has been successfully initialized\n"
|
|
return 0
|
|
}
|
|
|
|
common_build() {
|
|
printf "Gathering system information...\n"
|
|
|
|
which cmake > /dev/null
|
|
printf " > CMake version: "
|
|
if [ $? -eq 0 ] ; then
|
|
cmake --version | head -n 1
|
|
else
|
|
printf "not found\n"
|
|
fi
|
|
|
|
which gcc > /dev/null
|
|
printf " > GCC version: "
|
|
if [ $? -eq 0 ] ; then
|
|
gcc --version | head -n 1
|
|
else
|
|
printf "not found\n"
|
|
fi
|
|
|
|
which clang > /dev/null
|
|
printf " > Clang version: "
|
|
if [ $? -eq 0 ] ; then
|
|
clang --version | head -n 1
|
|
else
|
|
printf "not found\n"
|
|
fi
|
|
|
|
printf "\n"
|
|
|
|
printf "Library\n"
|
|
if [ ! -d "build" ] ; then
|
|
printf " > Creating the build directory...\n"
|
|
mkdir "build"
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Failed to create the build directory\n"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
local log_file=`mktemp`
|
|
local processor_count=`get_processor_count`
|
|
|
|
printf " > Configuring...\n"
|
|
( cd "build" && cmake .. ) > "$log_file" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Configure failed; CMake returned an error.\n\n\n"
|
|
cat "$log_file"
|
|
return 1
|
|
fi
|
|
|
|
printf " > Building...\n"
|
|
( cd "build" && make -j "${processor_count}" ) > "$log_file" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x The build has failed.\n\n\n"
|
|
cat "$log_file"
|
|
return 1
|
|
fi
|
|
|
|
printf " > Installing...\n"
|
|
sudo touch /usr/lib/test_file > /dev/null 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Access denied to /usr/lib; examples will not be built\n"
|
|
|
|
else
|
|
( cd "build" && sudo make install ) > "$log_file" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Failed to install the library.\n\n\n"
|
|
cat "$log_file"
|
|
return 1
|
|
fi
|
|
|
|
printf "\n"
|
|
|
|
printf "Examples\n"
|
|
if [ ! -d "examples_build" ] ; then
|
|
printf " > Creating the build directory...\n"
|
|
mkdir "examples_build"
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Failed to create the build directory\n\n\n"
|
|
cat "$log_file"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
printf " > Configuring...\n"
|
|
( cd "examples_build" && cmake "../examples/peaddrconv" ) > "$log_file" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Configure failed; CMake returned an error.\n\n\n"
|
|
cat "$log_file"
|
|
return 1
|
|
fi
|
|
|
|
printf " > Building...\n"
|
|
( cd "examples_build" && make -j "${processor_count}" ) > "$log_file" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x The build has failed.\n\n\n"
|
|
cat "$log_file"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
printf "\n"
|
|
|
|
printf "pepy\n"
|
|
|
|
printf " > Building...\n"
|
|
( cd python && python2 ./setup.py build ) > "$log_file" 2>&1
|
|
if [ $? -ne 0 ] ; then
|
|
printf " x Build failed.\n\n\n"
|
|
cat "$log_file"
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
linux_build() {
|
|
printf "Building platform: linux\n"
|
|
|
|
source /etc/*-release
|
|
printf "Distribution: ${DISTRIB_DESCRIPTION}\n\n"
|
|
|
|
common_build
|
|
if [ $? -ne 0 ] ; then
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
osx_build() {
|
|
printf "Building platform: macOS\n\n"
|
|
|
|
printf "macOS version: "
|
|
sw_vers -productVersion
|
|
|
|
common_build
|
|
if [ $? -ne 0 ] ; then
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
main $@
|
|
exit $?
|