diff --git a/buildManylinux.sh b/buildManylinux.sh new file mode 100755 index 0000000..ee43f65 --- /dev/null +++ b/buildManylinux.sh @@ -0,0 +1,142 @@ +#!/bin/bash +# Kompiluje bibliotekę i buduje paczki dystrybucyjne zawierające +# Morfeusza i słowniki SGJP i Polimorf +# +# Założenia: +# • kod źródłowy Morfeusza jest w MORFEUSZ_SRC +# • słowniki są już skompilowane w katalogu DICT_DIR +# • kompilacja odbędzie się w katalogu BUILD_DIR (który zostanie skasowany i utworzony) +# • wyniki zostaną umieszczone w TARGET_DIR + +#set -ex -o pipefail +set -x + +if [ "$#" -ne 4 ]; then + echo "Expected arguments: ‹DICT_NAME› ‹DICT_VERSION› ‹BUILD_ENV› ‹64/32›" + exit 1 +fi + +export DICT_NAME="$1" +export DICT_VERSION="$2" + +export MORFEUSZ_SRC=`pwd`/Morfeusz +export DICT_DIR=`pwd`/dicts +export ANALYZER_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-a.cpp +export GENERATOR_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-s.cpp + +# Wersja środowiska kompilacyjnego (znaczy pod którym Ubuntu budujemy: 14.04, 16.04, 18.04, 19.04 …): +# Staje się debianowym numerem subwersji: morfeusz…_1.9.27-18.04_amd64.deb +export BUILD_ENV=$3 + +export BITS=$4 + +export BUILD_ROOT=`pwd`/build/$1 +export TARGET_ROOT=`pwd`/target + + + +function build { + set -e -o pipefail + os=$1 + arch=$2 + embedded=$3 + python_ver=$4 + shift 4 + targets=$@ + +# toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-$os-$arch.cmake + toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-Linux-native.cmake + if [ "$os" = "Linux" ]; then + buildDir=$BUILD_ROOT/$os-$BUILD_ENV-$arch-$embedded + targetDir=$TARGET_ROOT/$os/$BUILD_ENV/$arch + else + buildDir=$BUILD_ROOT/$os-$arch-$embedded + targetDir=$TARGET_ROOT/$os/$arch + fi +# rm -rf $buildDir || true + mkdir -p $buildDir + + +# echo "Will use $toolchain toolchain" + + # rm -rf $buildDir + #~ rm -rf $targetDir + mkdir -p $buildDir + rm -f $buildDir/CMakeCache.txt + mkdir -p $targetDir + cd $buildDir + + if [ "$embedded" = true ] + then + if [ "$os" == "Linux" ] + then + CPACK_GENERATOR=TGZ + fi + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \ + -D TARGET_DIR=$targetDir \ + -D ANALYZER_DICTIONARY_CPP=$ANALYZER_DICTIONARY_CPP \ + -D GENERATOR_DICTIONARY_CPP=$GENERATOR_DICTIONARY_CPP \ + -D DEFAULT_DICT_NAME=$DICT_NAME \ + -D SKIP_DICTIONARY_BUILDING=1 \ + -D EMBEDDED_DEFAULT_DICT=1 \ + -D DICT_VERSION=$DICT_VERSION \ + -D BUILT_ON=$BUILD_ENV " + if [ "$CPACK_GENERATOR" != "" ] + then + CMAKE_ARGS="$CMAKE_ARGS -D CPACK_GENERATOR=$CPACK_GENERATOR" + fi + else + # "setting default ACL to prevent control-file-has-bad-permissions lintian error" + setfacl -R -d -m o::rx -m g::rx -m u::rwx . + + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \ + -D TARGET_DIR=$targetDir \ + -D DEFAULT_DICT_DIR=$DICT_DIR \ + -D DEFAULT_DICT_NAME=$DICT_NAME \ + -D SKIP_DICTIONARY_BUILDING=1 \ + -D CPACK_GENERATOR=DEB \ + -D DICT_VERSION=$DICT_VERSION \ + -D BUILT_ON=$BUILD_ENV " + fi + CMAKE_ARGS="$CMAKE_ARGS -D PY=$python_ver" + cmake $CMAKE_ARGS $MORFEUSZ_SRC 2>&1 + echo "building for $os-$arch ($BUILD_ENV)" >&2 +# make + make $targets +} +export -f build + +function log { + os=$1 + arch=$2 + stdbuf -oL sed -e $"s/^/$os-$BUILD_ENV-$arch:\t/" | tee -a "log/$os-$BUILD_ENV-$arch.out" +} +export -f log + +##??? rm -rf log $BUILD_ROOT +mkdir -p log + + +build Linux $BITS true 3.0 package package-java gui-tgz package-python3 package-builder 2>&1 | log Linux-tgz3 $BITS + +# if [ -x /usr/bin/python2 ] +# then +# build Linux $BITS true 2.7 package-python2 2>&1 | log Linux-tgz2 $BITS; +# fi + +# # Kompilujemy dodatkowe wheele w środowiskach wirutalnych: +# ( +# cd $BUILD_ROOT/Linux-$BUILD_ENV-$BITS-true +# if [ -d ~/env/ ]; then +# for pyenv in ~/env/* ; do +# source $pyenv/bin/activate +# make package-python3-whl +# python --version +# deactivate +# done +# fi +# ) | log Linux-whl $BITS + +# Pakiety debianowe bez wkompilowanego słownika: +#build Linux $BITS false 0 lib-deb bin-deb dev-deb dictionary-deb java-deb gui-deb 2>&1 | log Linux-deb $BITS + diff --git a/buildUbuntu.sh b/buildUbuntu.sh new file mode 100755 index 0000000..a6305a8 --- /dev/null +++ b/buildUbuntu.sh @@ -0,0 +1,141 @@ +#!/bin/bash +# Kompiluje bibliotekę i buduje paczki dystrybucyjne zawierające +# Morfeusza i słowniki SGJP i Polimorf +# +# Założenia: +# • kod źródłowy Morfeusza jest w MORFEUSZ_SRC +# • słowniki są już skompilowane w katalogu DICT_DIR +# • kompilacja odbędzie się w katalogu BUILD_DIR (który zostanie skasowany i utworzony) +# • wyniki zostaną umieszczone w TARGET_DIR + +#set -ex -o pipefail +set -x + +if [ "$#" -ne 4 ]; then + echo "Expected arguments: ‹DICT_NAME› ‹DICT_VERSION› ‹BUILD_ENV› ‹64/32›" + exit 1 +fi + +export DICT_NAME="$1" +export DICT_VERSION="$2" + +export MORFEUSZ_SRC=`pwd`/Morfeusz +export DICT_DIR=`pwd`/dicts +export ANALYZER_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-a.cpp +export GENERATOR_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-s.cpp + +# Wersja środowiska kompilacyjnego (znaczy pod którym Ubuntu budujemy: 14.04, 16.04, 18.04, 19.04 …): +# Staje się debianowym numerem subwersji: morfeusz…_1.9.27-18.04_amd64.deb +export BUILD_ENV=$3 + +export BITS=$4 + +export BUILD_ROOT=`pwd`/build/$1 +export TARGET_ROOT=`pwd`/target + + + +function build { + set -e -o pipefail + os=$1 + arch=$2 + embedded=$3 + python_ver=$4 + shift 4 + targets=$@ + +# toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-$os-$arch.cmake + toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-Linux-native.cmake + if [ "$os" = "Linux" ]; then + buildDir=$BUILD_ROOT/$os-$BUILD_ENV-$arch-$embedded + targetDir=$TARGET_ROOT/$os/$BUILD_ENV/$arch + else + buildDir=$BUILD_ROOT/$os-$arch-$embedded + targetDir=$TARGET_ROOT/$os/$arch + fi +# rm -rf $buildDir || true + mkdir -p $buildDir + + +# echo "Will use $toolchain toolchain" + + # rm -rf $buildDir + #~ rm -rf $targetDir + mkdir -p $buildDir + rm -f $buildDir/CMakeCache.txt + mkdir -p $targetDir + cd $buildDir + + if [ "$embedded" = true ] + then + if [ "$os" == "Linux" ] + then + CPACK_GENERATOR=TGZ + fi + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \ + -D TARGET_DIR=$targetDir \ + -D ANALYZER_DICTIONARY_CPP=$ANALYZER_DICTIONARY_CPP \ + -D GENERATOR_DICTIONARY_CPP=$GENERATOR_DICTIONARY_CPP \ + -D DEFAULT_DICT_NAME=$DICT_NAME \ + -D SKIP_DICTIONARY_BUILDING=1 \ + -D EMBEDDED_DEFAULT_DICT=1 \ + -D DICT_VERSION=$DICT_VERSION \ + -D BUILT_ON=$BUILD_ENV " + if [ "$CPACK_GENERATOR" != "" ] + then + CMAKE_ARGS="$CMAKE_ARGS -D CPACK_GENERATOR=$CPACK_GENERATOR" + fi + else + # "setting default ACL to prevent control-file-has-bad-permissions lintian error" + setfacl -R -d -m o::rx -m g::rx -m u::rwx . + + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \ + -D TARGET_DIR=$targetDir \ + -D DEFAULT_DICT_DIR=$DICT_DIR \ + -D DEFAULT_DICT_NAME=$DICT_NAME \ + -D SKIP_DICTIONARY_BUILDING=1 \ + -D CPACK_GENERATOR=DEB \ + -D DICT_VERSION=$DICT_VERSION \ + -D BUILT_ON=$BUILD_ENV " + fi + CMAKE_ARGS="$CMAKE_ARGS -D PY=$python_ver" + cmake $CMAKE_ARGS $MORFEUSZ_SRC 2>&1 + echo "building for $os-$arch ($BUILD_ENV)" >&2 +# make + make $targets +} +export -f build + +function log { + os=$1 + arch=$2 + stdbuf -oL sed -e $"s/^/$os-$BUILD_ENV-$arch:\t/" | tee -a "log/$os-$BUILD_ENV-$arch.out" +} +export -f log + +##??? rm -rf log $BUILD_ROOT +mkdir -p log + +# Pakiety z wkompilowanym słownikiem i niewrażliwe na kwestię słownika: +# build Linux $BITS true 3.0 package package-java gui-tgz package-python3 package-builder 2>&1 | log Linux-tgz3 $BITS +# if [ -x /usr/bin/python2 ] +# then +# build Linux $BITS true 2.7 package-python2 2>&1 | log Linux-tgz2 $BITS; +# fi + +# # Kompilujemy dodatkowe wheele w środowiskach wirutalnych: +# ( +# cd $BUILD_ROOT/Linux-$BUILD_ENV-$BITS-true +# if [ -d ~/env/ ]; then +# for pyenv in ~/env/* ; do +# source $pyenv/bin/activate +# make package-python3-whl +# python --version +# deactivate +# done +# fi +# ) | log Linux-whl $BITS + +# Pakiety debianowe bez wkompilowanego słownika: +build Linux $BITS false 3.0 lib-deb bin-deb dev-deb dictionary-deb java-deb gui-deb package-python3-deb 2>&1 | log Ubuntu $BITS + diff --git a/fsabuilder/CMakeLists.txt b/fsabuilder/CMakeLists.txt index accd842..a71a27e 100644 --- a/fsabuilder/CMakeLists.txt +++ b/fsabuilder/CMakeLists.txt @@ -29,15 +29,11 @@ add_custom_target (package-builder-egg DEPENDS builder-setup ) add_custom_target (package-builder-whl - COMMAND python3 ${SETUP_PY} bdist_wheel -d "${TARGET_DIR}" - DEPENDS builder-setup -) -add_custom_target (package-builder-sdist - COMMAND python3 ${SETUP_PY} sdist -d "${TARGET_DIR}" + COMMAND python3 -m build --outdir "${TARGET_DIR}" DEPENDS builder-setup ) -set (PACKAGE_DEPENDS "package-builder-whl" "package-builder-sdist") +set (PACKAGE_DEPENDS "package-builder-whl") if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") if (BUILT_ON) @@ -61,7 +57,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") COMMAND mkdir -p "${TARGET_DIR}" && cp ${CMAKE_CURRENT_BINARY_DIR}/deb_dist/${MORFEUSZBUILDER}*.deb "${TARGET_DIR}" DEPENDS package-builder-deb-build ) - list (APPEND PACKAGE_DEPENDS package-builder-deb) +# list (APPEND PACKAGE_DEPENDS package-builder-deb) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows") #~ add_custom_target (package-python-win-installer #~ COMMAND python ${SETUP_PY} bdist_wininst -d ${TARGET_DIR} --plat-name "${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}" diff --git a/morfeusz/wrappers/python3/CMakeLists.txt b/morfeusz/wrappers/python3/CMakeLists.txt index 825ee6a..60a0133 100644 --- a/morfeusz/wrappers/python3/CMakeLists.txt +++ b/morfeusz/wrappers/python3/CMakeLists.txt @@ -2,15 +2,10 @@ # SWIG #set(CMAKE_SWIG_OUTDIR swig) #~ FIND_PACKAGE (SWIG REQUIRED) -if (NOT PYTHON_INCLUDE_DIRS) - set(Python_ADDITIONAL_VERSIONS 3.4) - FIND_PACKAGE (PythonLibs ${PY} REQUIRED) -endif () #~ INCLUDE (${SWIG_USE_FILE}) set (PY3MORFEUSZ_VERSION "${Morfeusz_LIB_VERSION}") # SWIG Java -INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH}) INCLUDE_DIRECTORIES (../..) @@ -26,57 +21,47 @@ add_custom_target (generate_python3_wrapper ALL ) set (SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in") -set (SETUP_PY_TMP "${CMAKE_CURRENT_BINARY_DIR}/setupTmp.py") set (SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py") set (DEPS "${SWIG_PYTHON_OUTFILE_CXX}" "${SWIG_PYTHON_OUTFILE_PY}") set (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build") configure_file (${SETUP_PY_IN} ${SETUP_PY}) +file(COPY pyproject.toml setup.cfg DESTINATION .) -set (EGG_NAME "morfeusz2-${PY3MORFEUSZ_VERSION}-py${PY}") -file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}") -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/EGG-INFO" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}/") +# set (EGG_NAME "morfeusz2-${PY3MORFEUSZ_VERSION}-py${PY}") +# file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}") +# file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/EGG-INFO" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}/") add_custom_target (generate_python3_setup_file DEPENDS ${SETUP_PY}) -add_custom_command (OUTPUT ${OUTPUT} - COMMAND python3 - ARGS ${SETUP_PY} build - DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz) +# add_custom_command (OUTPUT ${OUTPUT} +# COMMAND python3 +# ARGS ${SETUP_PY} build +# DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz) -add_custom_target (build_python3_wrapper - DEPENDS ${OUTPUT}) +# add_custom_target (build_python3_wrapper +# DEPENDS ${OUTPUT}) add_custom_target (py3morfeusz - DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz build_python3_wrapper) + DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz) if (UNIX) - add_custom_target (install-python3 - COMMAND python3 ${SETUP_PY} install --home=${CMAKE_INSTALL_PREFIX} - DEPENDS py3morfeusz - ) - add_custom_target (package-python3-egg - COMMAND python3 ${SETUP_PY} bdist_egg -d "${TARGET_DIR}" --plat-name "${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}" - DEPENDS py3morfeusz - ) + # add_custom_target (install-python3 + # COMMAND python3 ${SETUP_PY} install --home=${CMAKE_INSTALL_PREFIX} + # DEPENDS py3morfeusz + # ) add_custom_target (package-python3-whl - COMMAND python3 ${SETUP_PY} bdist_wheel -d "${TARGET_DIR}" - #--plat-name "${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}" - DEPENDS py3morfeusz + COMMAND python3 -m build --outdir "${TARGET_DIR}" + DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz ) - configure_file (WHEEL.linux.in WHEEL) add_custom_target (package-python3-fatwhl - COMMAND python3 setup.py build_py - COMMAND python3 setup.py build_ext --rpath [['$${ORIGIN}']] -b fatlib - COMMAND python3 setup.py bdist_wheel --skip-build --keep-temp -b fatlib - COMMAND cp WHEEL fatlib/morfeusz2-${PY3MORFEUSZ_VERSION}.dist-info/ - COMMAND cp ../../libmorfeusz2.so fatlib/ - COMMAND python3 -m wheel pack --build-number ${DICT_VERSION} --dest-dir ${TARGET_DIR} fatlib/ - COMMAND rm -r fatlib + COMMAND python3 -m build + COMMAND zip -j dist/morfeusz2-*-abi3-*.whl ../../libmorfeusz2.so + COMMAND mv dist/morfeusz2-*-abi3-*.whl ${TARGET_DIR} DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz ) -# set (PACKAGE_DEPENDS package-python3-egg package-python3-whl) +# set (PACKAGE_DEPENDS package-python3-whl) set (PACKAGE_DEPENDS package-python3-fatwhl) if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") @@ -100,11 +85,16 @@ if (UNIX) COMMAND mkdir -p "${TARGET_DIR}" && cp ${CMAKE_CURRENT_BINARY_DIR}/deb_dist/python3-morfeusz2*.deb "${TARGET_DIR}" DEPENDS package-python3-deb-build ) - list (APPEND PACKAGE_DEPENDS package-python3-deb) + # list (APPEND PACKAGE_DEPENDS package-python3-deb) endif () add_custom_target (package-python3 DEPENDS ${PACKAGE_DEPENDS}) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND CMAKE_CROSSCOMPILING) + if (NOT PYTHON_INCLUDE_DIRS) + set(Python_ADDITIONAL_VERSIONS 3.4) + FIND_PACKAGE (PythonLibs ${PY} REQUIRED) + endif () + INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH}) add_custom_target (package-python3-egg-info COMMAND python3 ${SETUP_PY} egg_info DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz diff --git a/morfeusz/wrappers/python3/pyproject.toml b/morfeusz/wrappers/python3/pyproject.toml new file mode 100644 index 0000000..fe61c1c --- /dev/null +++ b/morfeusz/wrappers/python3/pyproject.toml @@ -0,0 +1,9 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + + +[project] +name = "morfeusz2" # as it would appear on PyPI +dynamic = ["authors", "license", "readme", "description", "version"] + diff --git a/morfeusz/wrappers/python3/setup.cfg b/morfeusz/wrappers/python3/setup.cfg new file mode 100644 index 0000000..97af180 --- /dev/null +++ b/morfeusz/wrappers/python3/setup.cfg @@ -0,0 +1,6 @@ +[bdist_wheel] +py-limited-api=cp36 +plat-name=manylinux_2_28_x86_64 + +[build_ext] +rpath=${ORIGIN}