Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: build

on:
push:
tags:
- 'v*'
branches:
- master
pull_request:
branches:
- master

jobs:
build-all:
runs-on: ${{ matrix.config.os }}
name: 'Build on ${{ matrix.config.os }} (${{ matrix.config.cxx }}, ${{ matrix.type }}, SHARED=${{ matrix.build_shared }})'
strategy:
fail-fast: false
matrix:
config:
- { os: "ubuntu-latest", cxx: "g++" }
- { os: "ubuntu-latest", cxx: "clang++" }
- { os: "windows-latest", cxx: "cl" }
type:
- "Debug"
- "Release"
build_shared:
- "ON"
- "OFF"
exclude:
- config: { os: "windows-latest", cxx: "cl" }
build_shared: "ON"
steps:
- name: "Checkout"
uses: actions/checkout@v7
with:
submodules: 'true'

- name: "Prepare Windows environment"
uses: ilammy/msvc-dev-cmd@v1
if: ${{ matrix.config.os == 'windows-latest' }}
with:
arch: win64

- name: "Install dependencies"
if: ${{ matrix.config.os == 'ubuntu-latest' }}
run: |
sudo apt-get update
sudo apt-get install -y 7zip

- name: "Build with ${{ matrix.config.cxx }}"
env:
CXX: ${{ matrix.config.cxx }}
run: |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.type }} -DLIB7ZIP_BUILD_SHARED_LIB=${{ matrix.build_shared }}
cmake --build build -j2
6 changes: 3 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "third_party/p7zip"]
path = third_party/p7zip
url = https://github.com/jinfeihan57/p7zip.git
[submodule "third_party/7zip"]
path = third_party/7zip
url = https://github.com/ip7z/7zip.git
75 changes: 28 additions & 47 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,64 +1,45 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
CMAKE_MINIMUM_REQUIRED(VERSION 3.24)

CMAKE_POLICY(
SET CMP0048 NEW
PROJECT(lib7zip
VERSION 4.0.0
LANGUAGES CXX
)

PROJECT (lib7zip
VERSION 3.0.0
)
SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

INCLUDE(ExternalProject)
INCLUDE(GNUInstallDirs)

IF(APPLE)
IF (APPLE)
SET(CMAKE_MACOSX_RPATH 1)
SET(CMAKE_PREFIX_PATH /usr/local)
ENDIF()
ENDIF ()

IF(NOT CMAKE_BUILD_TYPE)
IF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "DEBUG")
#SET(CMAKE_BUILD_TYPE "RELEASE")
#SET(CMAKE_BUILD_TYPE "RELWITHDEBINFO")
#SET(CMAKE_BUILD_TYPE "MINSIZEREL")
ENDIF()

SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")

OPTION(BUILD_SHARED_LIB "build shared library" OFF)
SET(P7ZIP_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/p7zip" CACHE PATH "pzip/7zip source code path")

IF (NOT IS_DIRECTORY ${P7ZIP_SOURCE_DIR})
MESSAGE(FATAL_ERROR "must proivde p7zip/7zip source path using -DP7ZIP_SOURCE_DIR")
ENDIF()

SET(P7ZIP_INCLUDE_PATH "${P7ZIP_SOURCE_DIR}"
"${P7ZIP_SOURCE_DIR}/CPP"
"${P7ZIP_SOURCE_DIR}/CPP/myWindows"
"${P7ZIP_SOURCE_DIR}/CPP/include_windows"
)
ENDIF ()

SET(SEVENZIP_SOURCE_DIR "${PROJECT_SOURCE_DIR}/third_party/7zip" CACHE STRING "Location of 7zip sources")
OPTION(LIB7ZIP_BUILD_SHARED_LIB "Build shared library (only for *nix)" OFF)
OPTION(LIB7ZIP_ENABLE_TESTING "Enable testing" ${PROJECT_IS_TOP_LEVEL})
OPTION(LIB7ZIP_WARNING_AS_ERROR "Threat all compiler warnings as errors" ${PROJECT_IS_TOP_LEVEL})

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(warnings -Wall -Wextra -Werror -Wno-unused-parameter)
set(cxx_warnings -Wno-class-memaccess)
set(no_undefined -Wl,--no-undefined)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(warnings -Wall -Wextra -Werror -Wno-inconsistent-missing-override -Wno-unused-parameter)
set(cxx_warnings "")
set(no_undefined -Wl,-undefined,error)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(warnings /W4 /WX /EHsc)
set(no_undefined "")
set(cxx_warnings "")
endif()
IF (NOT IS_DIRECTORY ${SEVENZIP_SOURCE_DIR})
MESSAGE(FATAL_ERROR "7zip source not found at ${SEVENZIP_SOURCE_DIR}. Please ensure git submodule is initialized: git submodule update --init --recursive")
ENDIF ()

SET(CXX_STANDARD_REQUIRED OFF)
SET(CXX_EXTENSION NO)

if (NOT CONFIGURED_ONCE)
ADD_COMPILE_OPTIONS(-fPIC -std=c++14 ${warnings} ${cxx_warnings})
ADD_LINK_OPTIONS(${no_undefined})
endif()
IF (LIB7ZIP_WARNING_AS_ERROR)
SET(CMAKE_COMPILE_WARNING_AS_ERROR ON)
ENDIF ()

ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(test)
IF (LIB7ZIP_ENABLE_TESTING)
ADD_SUBDIRECTORY(test)
ENDIF ()

# Install
INSTALL(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
Loading