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
219 changes: 156 additions & 63 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,47 +3,48 @@ name: Build
on:
push:
pull_request:
#schedule:
# - cron: '0 */2 * * *'

jobs:
build-linux:
build-linux-x86_64:
runs-on: ubuntu-latest
timeout-minutes: 90
env:
OS_NAME: unknown
ARCH_NAME: unknown
DLL_NAME: libasyncprocess.so
RESULT_NAME: result-linux
RESULT_PATH: result-linux
OS_NAME: Linux
ARCH_NAME: x86_64
LIB_NAME: libasyncprocess.a
RESULT_NAME: result-linux-x86_64
RESULT_PATH: result-linux-x86_64
RESULT_PATH_SUB: result-async/static
steps:
- uses: actions/checkout@v2
- name: Set environment variables
run: |
pwd
uname
uname -m
OS_NAME=`uname`
ARCH_NAME=`uname -m`
echo "OS_NAME=$OS_NAME" >> $GITHUB_ENV
echo "ARCH_NAME=$ARCH_NAME" >> $GITHUB_ENV
- uses: actions/checkout@v4
- name: Install
run: |
sudo apt-get update
sudo apt-get install libtool automake
- name: Build
run: |
gcc -v
rm static/$ARCH_NAME/$OS_NAME/$DLL_NAME
./bootstrap
# Generate build system
libtoolize --copy --force --quiet
aclocal
autoheader
automake --add-missing --copy --foreign
autoconf
# Configure for static library build
./configure --enable-static --disable-shared
make
- name: Verify static library
run: |
file .libs/$LIB_NAME
ls -lh .libs/$LIB_NAME
- name: Copy Result
if: always()
run: |
mkdir -p $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME
cp static/$ARCH_NAME/$OS_NAME/$DLL_NAME $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME
cp .libs/$LIB_NAME $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME/
- name: Upload Result
if: always()
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: ${{ env.RESULT_NAME }}
path: ${{ env.RESULT_PATH }}
Expand All @@ -54,82 +55,174 @@ jobs:
env:
OS_NAME: Linux
ARCH_NAME: aarch64
DLL_NAME: libasyncprocess.so
LIB_NAME: libasyncprocess.a
RESULT_NAME: result-linux-aarch64
RESULT_PATH: result-linux-aarch64
RESULT_PATH_SUB: result-async/static
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Build on aarch64 (arm64)
id: runcmd
uses: uraimo/run-on-arch-action@v1.0.5
uses: uraimo/run-on-arch-action@v2
with:
architecture: aarch64
distribution: ubuntu18.04
arch: aarch64
distro: ubuntu22.04
githubToken: ${{ github.token }}
install: |
apt-get update -q -y
apt-get install -q -y build-essential automake libtool file
run: |
apt-get update
apt-get -y install build-essential
apt-get -y install automake
apt-get -y install libtool
pwd
uname
uname -m
gcc -v
rm static/${{ env.ARCH_NAME }}/${{ env.OS_NAME }}/${{ env.DLL_NAME }}
./bootstrap
uname -a
gcc --version
# Generate build system
libtoolize --copy --force --quiet
aclocal
autoheader
automake --add-missing --copy --foreign
autoconf
# Configure for static library build
./configure --enable-static --disable-shared
make
# Verify static library
file .libs/libasyncprocess.a
ls -lh .libs/libasyncprocess.a
- name: Copy Result
if: always()
run: |
mkdir -p $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME
cp static/$ARCH_NAME/$OS_NAME/$DLL_NAME $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME
cp .libs/$LIB_NAME $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME/
- name: Upload Result
if: always()
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: ${{ env.RESULT_NAME }}
path: ${{ env.RESULT_PATH }}

build-osx:
runs-on: macos-latest
build-osx-aarch64:
runs-on: macos-14 # macOS 14 runs on Apple Silicon (aarch64/arm64)
timeout-minutes: 90
env:
OS_NAME: unknown
ARCH_NAME: unknown
DLL_NAME: libasyncprocess.so
RESULT_NAME: result-osx
RESULT_PATH: result-osx
OS_NAME: Darwin
ARCH_NAME: aarch64
LIB_NAME: libasyncprocess.a
RESULT_NAME: result-osx-aarch64
RESULT_PATH: result-osx-aarch64
RESULT_PATH_SUB: result-async/static
steps:
- uses: actions/checkout@v2
- name: Set environment variables
- uses: actions/checkout@v4
- name: Install tools
run: |
pwd
uname
uname -m
OS_NAME=`uname`
ARCH_NAME=`uname -m`
echo "OS_NAME=$OS_NAME" >> $GITHUB_ENV
echo "ARCH_NAME=$ARCH_NAME" >> $GITHUB_ENV
brew install automake
brew install libtool
- name: Build
run: |
gcc -v
# Generate build system
glibtoolize --copy --force --quiet
aclocal
autoheader
automake --add-missing --copy --foreign
autoconf
# Configure for static library build
./configure --enable-static --disable-shared
make
- name: Verify static library
run: |
file .libs/$LIB_NAME
ls -lh .libs/$LIB_NAME
lipo -info .libs/$LIB_NAME
- name: Copy Result
if: always()
run: |
mkdir -p $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME
cp .libs/$LIB_NAME $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME/
- name: Upload Result
if: always()
uses: actions/upload-artifact@v4
with:
name: ${{ env.RESULT_NAME }}
path: ${{ env.RESULT_PATH }}

build-osx-x86_64:
runs-on: macos-13 # macOS 13 runs on Intel (x86_64)
timeout-minutes: 90
env:
OS_NAME: Darwin
ARCH_NAME: x86_64
LIB_NAME: libasyncprocess.a
RESULT_NAME: result-osx-x86_64
RESULT_PATH: result-osx-x86_64
RESULT_PATH_SUB: result-async/static
steps:
- uses: actions/checkout@v4
- name: Install tools
run: |
brew install automake
#brew install libtool
which glibtoolize
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
which libtoolize
brew install libtool
- name: Build
run: |
gcc -v
rm static/$ARCH_NAME/$OS_NAME/$DLL_NAME
./bootstrap
# Generate build system
glibtoolize --copy --force --quiet
aclocal
autoheader
automake --add-missing --copy --foreign
autoconf
# Configure for static library build
./configure --enable-static --disable-shared
make
- name: Verify static library
run: |
file .libs/$LIB_NAME
ls -lh .libs/$LIB_NAME
lipo -info .libs/$LIB_NAME
- name: Copy Result
if: always()
run: |
mkdir -p $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME
cp static/$ARCH_NAME/$OS_NAME/$DLL_NAME $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME
cp .libs/$LIB_NAME $RESULT_PATH/$RESULT_PATH_SUB/$ARCH_NAME/$OS_NAME/
- name: Upload Result
if: always()
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: ${{ env.RESULT_NAME }}
path: ${{ env.RESULT_PATH }}

release:
runs-on: ubuntu-latest
needs: [build-linux-x86_64, build-linux-aarch64, build-osx-aarch64, build-osx-x86_64]
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts

- name: Prepare release files
run: |
mkdir -p release-files
echo "Finding all .a files in artifacts..."
find artifacts -name "*.a" -type f
echo ""
echo "Creating uniquely named release files..."
# Find and rename all library files with their arch and os
find artifacts -name "*.a" -type f | while read file; do
# Extract the directory structure to get arch and os
dir=$(dirname "$file")
arch=$(basename "$(dirname "$dir")")
os=$(basename "$dir")
# Normalize OS name to lowercase for consistency
os_lower=$(echo "$os" | tr '[:upper:]' '[:lower:]')
# Create a unique filename: libasyncprocess.{os}.{arch}.a
output_name="libasyncprocess.${os_lower}.${arch}.a"
echo " $file -> release-files/$output_name"
cp "$file" "release-files/$output_name"
done
echo ""
echo "Release files ready for upload:"
ls -lh release-files/

- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: release-files/*
63 changes: 63 additions & 0 deletions GNUmakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
PREFIX ?= /usr/local

GENERATED_MAKEFILE := $(wildcard Makefile)

.PHONY: distclean
distclean:
@if [ -f Makefile ]; then \
echo "Running make distclean..."; \
$(MAKE) -f Makefile distclean 2>/dev/null || true; \
fi
@echo "Removing autotools generated files..."
@rm -rf Makefile Makefile.in configure config.* libtool aclocal.m4 stamp-h1 autom4te.cache
@rm -rf compile config.guess config.sub depcomp install-sh ltmain.sh missing
@rm -rf .libs .deps src/.libs src/.deps
@rm -f *.lo *.la src/*.lo src/*.la
@echo "All generated files removed. Run 'make' to rebuild."

# If Makefile exists, delegate to it
ifneq ($(GENERATED_MAKEFILE),)

.DEFAULT_GOAL := all

%:
$(MAKE) -f Makefile $@

else

# No Makefile - need to generate build system
.DEFAULT_GOAL := all

configure: configure.ac Makefile.am
@echo "Generating build system..."
@which glibtoolize > /dev/null 2>&1 && glibtoolize --copy --force --quiet || libtoolize --copy --force --quiet
@aclocal
@autoheader
@automake --add-missing --copy --foreign
@autoconf
@echo ""

Makefile: configure
@echo "Running configure..."
@./configure --prefix=$(PREFIX)
@echo ""

.PHONY: all
all: Makefile
@$(MAKE) -f Makefile all
@echo ""
@echo "Build complete. Install with: make install"
@echo ""

.PHONY: build
build: all

.PHONY: install
install: Makefile
@$(MAKE) -f Makefile install

.PHONY: clean
clean: Makefile
@$(MAKE) -f Makefile clean

endif
22 changes: 7 additions & 15 deletions Makefile.am
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
pkglib_LTLIBRARIES = libasyncprocess.la
libasyncprocess_la_LDFLAGS = -module -avoid-version -no-undefined
libasyncprocess_la_SOURCES = src/async-process.c src/async-process_windows.c
lib_LTLIBRARIES = libasyncprocess.la
libasyncprocess_la_LDFLAGS = -version-info @LT_VERSION_INFO@ -no-undefined
libasyncprocess_la_SOURCES = src/async-process.c

copy:
$(MKDIR_P) static/`uname -m`/`uname`
cp -f .libs/libasyncprocess.so static/`uname -m`/`uname`/libasyncprocess.so|true
cp -f .libs/libasyncprocess.dylib static/`uname -m`/`uname`/libasyncprocess.dylib|true
case "$(MSYSTEM)" in \
MINGW32) \
$(MKDIR_P) static/x86/windows ;\
cp -f .libs/libasyncprocess.dll static/x86/windows/libasyncprocess.dll|true;; \
*) \
$(MKDIR_P) static/`uname -m`/windows ;\
cp -f .libs/libasyncprocess.dll static/`uname -m`/windows/libasyncprocess.dll|true;; \
esac
include_HEADERS = src/async-process.h

install-exec-hook:
rm -f $(DESTDIR)$(libdir)/libasyncprocess.la
Loading