diff --git a/.github/workflows/rake.yml b/.github/workflows/rake.yml new file mode 100644 index 0000000..bd5188f --- /dev/null +++ b/.github/workflows/rake.yml @@ -0,0 +1,49 @@ +name: rake + +on: + push: + branches: [ master, main ] + tags: [ v* ] + pull_request: + +permissions: + contents: write + +jobs: + rake-alpine: + name: Test on Ruby ${{ matrix.ruby.version }} ${{ matrix.os }}-${{ matrix.env.CC }} + runs-on: ubuntu-latest + env: ${{ matrix.env }} + container: + image: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - alpine:3.18 + - alpine:3.16 + env: + - CC: gcc + CXX: g++ + - CC: clang + CXX: clang++ + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Ruby + run: | + apk --no-cache --upgrade add build-base cmake git bash \ + autoconf make binutils-dev pkgconfig tar ruby-dev clang + + - name: Install Bundler + run: | + gem install bundler + bundle install + + - run: bundle exec rake + + rake: + needs: rake-alpine + uses: fontist/support/.github/workflows/rake.yml@main diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..c4c53ff --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,21 @@ +name: release + +on: + workflow_dispatch: + inputs: + next_version: + description: | + Next release version. Possible values: x.y.z, major, minor, patch (or pre|rc|etc). + Also, you can pass 'skip' to skip 'git tag' and do 'gem push' for the current version + required: true + default: 'skip' + repository_dispatch: + types: [ do-release ] + +jobs: + release: + uses: fontist/support/.github/workflows/release.yml@main + with: + next_version: ${{ github.event.inputs.next_version }} + secrets: + rubygems-api-key: ${{ secrets.FONTIST_CI_RUBYGEMS_API_KEY }} diff --git a/.github/workflows/test-and-release.yml b/.github/workflows/test-and-release.yml deleted file mode 100644 index bfeaae5..0000000 --- a/.github/workflows/test-and-release.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: test-and-release - -on: - push: - branches: [ master ] -# tags: [ 'v*' ] - pull_request: - workflow_dispatch: - -concurrency: - group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}' - cancel-in-progress: true - -jobs: - test: - strategy: - fail-fast: false - matrix: - os: [ubuntu, macos, windows] - # It seems that Ruby 2.4 or this gem has a bug related to this gem. - ruby: ['2.5', '2.6', '2.7', '3.0', '3.1', '3.2', head] - runs-on: ${{ matrix.os }}-latest - continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }} - steps: - - uses: actions/checkout@v3 - - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ matrix.ruby }} - - run: gem update bundler - - run: bundle install - - run: bundle exec rake build_local - - run: bundle exec rake spec - - - test-container: - name: Ruby with ${{ matrix.env.CC }} compiler on ${{ matrix.os }} - container: - image: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ 'alpine:3.18', 'alpine:3.16' ] - env: - - {CC: gcc, CXX: g++} - - {CC: clang, CXX: clang++} - runs-on: ubuntu-latest - env: ${{ matrix.env }} - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Install Ruby - run: | - apk --no-cache --upgrade add build-base cmake git bash \ - autoconf make binutils-dev pkgconfig tar ruby-dev clang - - - run: gem install bundler - - run: bundle install - - run: bundle exec rake build_local - - run: bundle exec rake spec - - release: - name: Release gem - needs: [test, test-container] - runs-on: ubuntu-latest - if: contains(github.ref, 'refs/tags/v') - steps: - - uses: actions/checkout@v3 - - - uses: cadwallion/publish-rubygems-action@master - env: - RUBYGEMS_API_KEY: ${{secrets.FONTIST_CI_RUBYGEMS_API_KEY}} diff --git a/Rakefile b/Rakefile index 39aa28b..165fbe7 100644 --- a/Rakefile +++ b/Rakefile @@ -77,3 +77,5 @@ task :copy_binary do FileUtils.cp(src, dest) if (File.exist?(src)) end end + +task default: %i[build_local spec] \ No newline at end of file diff --git a/ext/p7zip/makefile.macosx_arm64 b/ext/p7zip/makefile.macosx_arm64 new file mode 100644 index 0000000..fe8106c --- /dev/null +++ b/ext/p7zip/makefile.macosx_arm64 @@ -0,0 +1,17 @@ +OPTFLAGS=-O2 + +ALLFLAGS=-arch arm64 ${OPTFLAGS} \ + -DENV_MACOSX \ + -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ + -D_REENTRANT -DENV_UNIX \ + $(LOCAL_FLAGS) + +CXX=clang++ +CC=clang + +LINK_SHARED=-bundle + +LOCAL_LIBS=-framework CoreFoundation +LOCAL_LIBS_DLL=$(LOCAL_LIBS) + +OBJ_CRC32=$(OBJ_CRC32_C) diff --git a/ext/p7zip/makefile.macosx_llvm_64bits b/ext/p7zip/makefile.macosx_llvm_64bits index 9ee281d..af22f4b 100644 --- a/ext/p7zip/makefile.macosx_llvm_64bits +++ b/ext/p7zip/makefile.macosx_llvm_64bits @@ -14,7 +14,7 @@ ALLFLAGS=-m64 ${OPTFLAGS} \ # CC=/Developer/usr/bin/llvm-gcc # For new Mac OS X : -XX=/usr/bin/llvm-g++ +CXX=/usr/bin/llvm-g++ CC=/usr/bin/llvm-gcc LINK_SHARED=-bundle @@ -24,4 +24,3 @@ LOCAL_LIBS_DLL=$(LOCAL_LIBS) OBJ_CRC32=$(OBJ_CRC32_C) OBJ_AES= - diff --git a/ext/seven_zip_ruby/extconf.rb b/ext/seven_zip_ruby/extconf.rb index 0885e48..dbd9ca4 100644 --- a/ext/seven_zip_ruby/extconf.rb +++ b/ext/seven_zip_ruby/extconf.rb @@ -10,10 +10,16 @@ def create_p7zip_makefile(type) config = RbConfig::CONFIG - allflags = config["ARCH_FLAG"] + ' -O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT -DENV_UNIX ' + allflags = config["ARCH_FLAG"] + ' -O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT -DENV_UNIX -v ' case(type) when :macosx allflags += ' -DENV_MACOSX ' + # Add explicit arch flag and deployment target for arm64 support + if RUBY_PLATFORM.include?('arm64') + allflags += ' -arch arm64 ' + # Set minimum deployment target to ensure arm64 compatibility + ENV['MACOSX_DEPLOYMENT_TARGET'] = '11.0' + end cc_shared = nil link_shared = "-bundle" local_libs = "-framework CoreFoundation" @@ -30,8 +36,8 @@ def create_p7zip_makefile(type) makefile_content = <<"EOS" ALLFLAGS=#{allflags} $(LOCAL_FLAGS) -CXX=#{config['CXX']} $(ALLFLAGS) -CC=#{config['CC']} $(ALLFLAGS) +CXX=#{config['CXX']} $(ALLFLAGS) -Wall -Wextra +CC=#{config['CC']} $(ALLFLAGS) -Wall -Wextra #{cc_shared_content} LINK_SHARED=#{link_shared} @@ -47,11 +53,13 @@ def create_p7zip_makefile(type) def check_ostype if (RUBY_PLATFORM.include?("darwin")) + # Ensure proper flags are set for macOS compilation + ENV['SDKROOT'] = `xcrun --show-sdk-path`.chomp return :macosx elsif (RUBY_PLATFORM.include?("linux")) return :linux elsif (RUBY_PLATFORM.include?("freebsd")) - return :freebsd + return :freebsd else raise "Unsupported platform" end @@ -184,6 +192,11 @@ def main Dir.chdir(File.expand_path("../../p7zip", __FILE__)) do create_p7zip_makefile(ostype) + # Use ARM64-specific makefile for macOS arm64 + if RUBY_PLATFORM.include?('darwin') && RUBY_PLATFORM.include?('arm64') + system("cp makefile.macosx_arm64 makefile.machine") + end + make_success = system("make common7z") raise "Failed to make p7zip" unless (make_success) diff --git a/lib/seven_zip_ruby/version.rb b/lib/seven_zip_ruby/version.rb index b2e412d..18d2015 100644 --- a/lib/seven_zip_ruby/version.rb +++ b/lib/seven_zip_ruby/version.rb @@ -1,3 +1,3 @@ module SevenZipRuby - VERSION = "1.6.2" + VERSION = "1.7.0.rc1" end