Commit bbf666a8a286314bdf7c9220d3008612955cc435

Authored by Marcin Woliński
1 parent 042c3749

changes in build system for Ubu24 and true manylinux wheels

buildManylinux.sh 0 → 100755
  1 +#!/bin/bash
  2 +# Kompiluje bibliotekę i buduje paczki dystrybucyjne zawierające
  3 +# Morfeusza i słowniki SGJP i Polimorf
  4 +#
  5 +# Założenia:
  6 +# • kod źródłowy Morfeusza jest w MORFEUSZ_SRC
  7 +# • słowniki są już skompilowane w katalogu DICT_DIR
  8 +# • kompilacja odbędzie się w katalogu BUILD_DIR (który zostanie skasowany i utworzony)
  9 +# • wyniki zostaną umieszczone w TARGET_DIR
  10 +
  11 +#set -ex -o pipefail
  12 +set -x
  13 +
  14 +if [ "$#" -ne 4 ]; then
  15 + echo "Expected arguments: ‹DICT_NAME› ‹DICT_VERSION› ‹BUILD_ENV› ‹64/32›"
  16 + exit 1
  17 +fi
  18 +
  19 +export DICT_NAME="$1"
  20 +export DICT_VERSION="$2"
  21 +
  22 +export MORFEUSZ_SRC=`pwd`/Morfeusz
  23 +export DICT_DIR=`pwd`/dicts
  24 +export ANALYZER_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-a.cpp
  25 +export GENERATOR_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-s.cpp
  26 +
  27 +# Wersja środowiska kompilacyjnego (znaczy pod którym Ubuntu budujemy: 14.04, 16.04, 18.04, 19.04 …):
  28 +# Staje się debianowym numerem subwersji: morfeusz…_1.9.27-18.04_amd64.deb
  29 +export BUILD_ENV=$3
  30 +
  31 +export BITS=$4
  32 +
  33 +export BUILD_ROOT=`pwd`/build/$1
  34 +export TARGET_ROOT=`pwd`/target
  35 +
  36 +
  37 +
  38 +function build {
  39 + set -e -o pipefail
  40 + os=$1
  41 + arch=$2
  42 + embedded=$3
  43 + python_ver=$4
  44 + shift 4
  45 + targets=$@
  46 +
  47 +# toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-$os-$arch.cmake
  48 + toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-Linux-native.cmake
  49 + if [ "$os" = "Linux" ]; then
  50 + buildDir=$BUILD_ROOT/$os-$BUILD_ENV-$arch-$embedded
  51 + targetDir=$TARGET_ROOT/$os/$BUILD_ENV/$arch
  52 + else
  53 + buildDir=$BUILD_ROOT/$os-$arch-$embedded
  54 + targetDir=$TARGET_ROOT/$os/$arch
  55 + fi
  56 +# rm -rf $buildDir || true
  57 + mkdir -p $buildDir
  58 +
  59 +
  60 +# echo "Will use $toolchain toolchain"
  61 +
  62 + # rm -rf $buildDir
  63 + #~ rm -rf $targetDir
  64 + mkdir -p $buildDir
  65 + rm -f $buildDir/CMakeCache.txt
  66 + mkdir -p $targetDir
  67 + cd $buildDir
  68 +
  69 + if [ "$embedded" = true ]
  70 + then
  71 + if [ "$os" == "Linux" ]
  72 + then
  73 + CPACK_GENERATOR=TGZ
  74 + fi
  75 + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \
  76 + -D TARGET_DIR=$targetDir \
  77 + -D ANALYZER_DICTIONARY_CPP=$ANALYZER_DICTIONARY_CPP \
  78 + -D GENERATOR_DICTIONARY_CPP=$GENERATOR_DICTIONARY_CPP \
  79 + -D DEFAULT_DICT_NAME=$DICT_NAME \
  80 + -D SKIP_DICTIONARY_BUILDING=1 \
  81 + -D EMBEDDED_DEFAULT_DICT=1 \
  82 + -D DICT_VERSION=$DICT_VERSION \
  83 + -D BUILT_ON=$BUILD_ENV "
  84 + if [ "$CPACK_GENERATOR" != "" ]
  85 + then
  86 + CMAKE_ARGS="$CMAKE_ARGS -D CPACK_GENERATOR=$CPACK_GENERATOR"
  87 + fi
  88 + else
  89 + # "setting default ACL to prevent control-file-has-bad-permissions lintian error"
  90 + setfacl -R -d -m o::rx -m g::rx -m u::rwx .
  91 +
  92 + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \
  93 + -D TARGET_DIR=$targetDir \
  94 + -D DEFAULT_DICT_DIR=$DICT_DIR \
  95 + -D DEFAULT_DICT_NAME=$DICT_NAME \
  96 + -D SKIP_DICTIONARY_BUILDING=1 \
  97 + -D CPACK_GENERATOR=DEB \
  98 + -D DICT_VERSION=$DICT_VERSION \
  99 + -D BUILT_ON=$BUILD_ENV "
  100 + fi
  101 + CMAKE_ARGS="$CMAKE_ARGS -D PY=$python_ver"
  102 + cmake $CMAKE_ARGS $MORFEUSZ_SRC 2>&1
  103 + echo "building for $os-$arch ($BUILD_ENV)" >&2
  104 +# make
  105 + make $targets
  106 +}
  107 +export -f build
  108 +
  109 +function log {
  110 + os=$1
  111 + arch=$2
  112 + stdbuf -oL sed -e $"s/^/$os-$BUILD_ENV-$arch:\t/" | tee -a "log/$os-$BUILD_ENV-$arch.out"
  113 +}
  114 +export -f log
  115 +
  116 +##??? rm -rf log $BUILD_ROOT
  117 +mkdir -p log
  118 +
  119 +
  120 +build Linux $BITS true 3.0 package package-java gui-tgz package-python3 package-builder 2>&1 | log Linux-tgz3 $BITS
  121 +
  122 +# if [ -x /usr/bin/python2 ]
  123 +# then
  124 +# build Linux $BITS true 2.7 package-python2 2>&1 | log Linux-tgz2 $BITS;
  125 +# fi
  126 +
  127 +# # Kompilujemy dodatkowe wheele w środowiskach wirutalnych:
  128 +# (
  129 +# cd $BUILD_ROOT/Linux-$BUILD_ENV-$BITS-true
  130 +# if [ -d ~/env/ ]; then
  131 +# for pyenv in ~/env/* ; do
  132 +# source $pyenv/bin/activate
  133 +# make package-python3-whl
  134 +# python --version
  135 +# deactivate
  136 +# done
  137 +# fi
  138 +# ) | log Linux-whl $BITS
  139 +
  140 +# Pakiety debianowe bez wkompilowanego słownika:
  141 +#build Linux $BITS false 0 lib-deb bin-deb dev-deb dictionary-deb java-deb gui-deb 2>&1 | log Linux-deb $BITS
  142 +
... ...
buildUbuntu.sh 0 → 100755
  1 +#!/bin/bash
  2 +# Kompiluje bibliotekę i buduje paczki dystrybucyjne zawierające
  3 +# Morfeusza i słowniki SGJP i Polimorf
  4 +#
  5 +# Założenia:
  6 +# • kod źródłowy Morfeusza jest w MORFEUSZ_SRC
  7 +# • słowniki są już skompilowane w katalogu DICT_DIR
  8 +# • kompilacja odbędzie się w katalogu BUILD_DIR (który zostanie skasowany i utworzony)
  9 +# • wyniki zostaną umieszczone w TARGET_DIR
  10 +
  11 +#set -ex -o pipefail
  12 +set -x
  13 +
  14 +if [ "$#" -ne 4 ]; then
  15 + echo "Expected arguments: ‹DICT_NAME› ‹DICT_VERSION› ‹BUILD_ENV› ‹64/32›"
  16 + exit 1
  17 +fi
  18 +
  19 +export DICT_NAME="$1"
  20 +export DICT_VERSION="$2"
  21 +
  22 +export MORFEUSZ_SRC=`pwd`/Morfeusz
  23 +export DICT_DIR=`pwd`/dicts
  24 +export ANALYZER_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-a.cpp
  25 +export GENERATOR_DICTIONARY_CPP=$DICT_DIR/$DICT_NAME-s.cpp
  26 +
  27 +# Wersja środowiska kompilacyjnego (znaczy pod którym Ubuntu budujemy: 14.04, 16.04, 18.04, 19.04 …):
  28 +# Staje się debianowym numerem subwersji: morfeusz…_1.9.27-18.04_amd64.deb
  29 +export BUILD_ENV=$3
  30 +
  31 +export BITS=$4
  32 +
  33 +export BUILD_ROOT=`pwd`/build/$1
  34 +export TARGET_ROOT=`pwd`/target
  35 +
  36 +
  37 +
  38 +function build {
  39 + set -e -o pipefail
  40 + os=$1
  41 + arch=$2
  42 + embedded=$3
  43 + python_ver=$4
  44 + shift 4
  45 + targets=$@
  46 +
  47 +# toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-$os-$arch.cmake
  48 + toolchain=$MORFEUSZ_SRC/toolchains/Toolchain-Linux-native.cmake
  49 + if [ "$os" = "Linux" ]; then
  50 + buildDir=$BUILD_ROOT/$os-$BUILD_ENV-$arch-$embedded
  51 + targetDir=$TARGET_ROOT/$os/$BUILD_ENV/$arch
  52 + else
  53 + buildDir=$BUILD_ROOT/$os-$arch-$embedded
  54 + targetDir=$TARGET_ROOT/$os/$arch
  55 + fi
  56 +# rm -rf $buildDir || true
  57 + mkdir -p $buildDir
  58 +
  59 +
  60 +# echo "Will use $toolchain toolchain"
  61 +
  62 + # rm -rf $buildDir
  63 + #~ rm -rf $targetDir
  64 + mkdir -p $buildDir
  65 + rm -f $buildDir/CMakeCache.txt
  66 + mkdir -p $targetDir
  67 + cd $buildDir
  68 +
  69 + if [ "$embedded" = true ]
  70 + then
  71 + if [ "$os" == "Linux" ]
  72 + then
  73 + CPACK_GENERATOR=TGZ
  74 + fi
  75 + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \
  76 + -D TARGET_DIR=$targetDir \
  77 + -D ANALYZER_DICTIONARY_CPP=$ANALYZER_DICTIONARY_CPP \
  78 + -D GENERATOR_DICTIONARY_CPP=$GENERATOR_DICTIONARY_CPP \
  79 + -D DEFAULT_DICT_NAME=$DICT_NAME \
  80 + -D SKIP_DICTIONARY_BUILDING=1 \
  81 + -D EMBEDDED_DEFAULT_DICT=1 \
  82 + -D DICT_VERSION=$DICT_VERSION \
  83 + -D BUILT_ON=$BUILD_ENV "
  84 + if [ "$CPACK_GENERATOR" != "" ]
  85 + then
  86 + CMAKE_ARGS="$CMAKE_ARGS -D CPACK_GENERATOR=$CPACK_GENERATOR"
  87 + fi
  88 + else
  89 + # "setting default ACL to prevent control-file-has-bad-permissions lintian error"
  90 + setfacl -R -d -m o::rx -m g::rx -m u::rwx .
  91 +
  92 + CMAKE_ARGS="-D CMAKE_TOOLCHAIN_FILE=$toolchain \
  93 + -D TARGET_DIR=$targetDir \
  94 + -D DEFAULT_DICT_DIR=$DICT_DIR \
  95 + -D DEFAULT_DICT_NAME=$DICT_NAME \
  96 + -D SKIP_DICTIONARY_BUILDING=1 \
  97 + -D CPACK_GENERATOR=DEB \
  98 + -D DICT_VERSION=$DICT_VERSION \
  99 + -D BUILT_ON=$BUILD_ENV "
  100 + fi
  101 + CMAKE_ARGS="$CMAKE_ARGS -D PY=$python_ver"
  102 + cmake $CMAKE_ARGS $MORFEUSZ_SRC 2>&1
  103 + echo "building for $os-$arch ($BUILD_ENV)" >&2
  104 +# make
  105 + make $targets
  106 +}
  107 +export -f build
  108 +
  109 +function log {
  110 + os=$1
  111 + arch=$2
  112 + stdbuf -oL sed -e $"s/^/$os-$BUILD_ENV-$arch:\t/" | tee -a "log/$os-$BUILD_ENV-$arch.out"
  113 +}
  114 +export -f log
  115 +
  116 +##??? rm -rf log $BUILD_ROOT
  117 +mkdir -p log
  118 +
  119 +# Pakiety z wkompilowanym słownikiem i niewrażliwe na kwestię słownika:
  120 +# build Linux $BITS true 3.0 package package-java gui-tgz package-python3 package-builder 2>&1 | log Linux-tgz3 $BITS
  121 +# if [ -x /usr/bin/python2 ]
  122 +# then
  123 +# build Linux $BITS true 2.7 package-python2 2>&1 | log Linux-tgz2 $BITS;
  124 +# fi
  125 +
  126 +# # Kompilujemy dodatkowe wheele w środowiskach wirutalnych:
  127 +# (
  128 +# cd $BUILD_ROOT/Linux-$BUILD_ENV-$BITS-true
  129 +# if [ -d ~/env/ ]; then
  130 +# for pyenv in ~/env/* ; do
  131 +# source $pyenv/bin/activate
  132 +# make package-python3-whl
  133 +# python --version
  134 +# deactivate
  135 +# done
  136 +# fi
  137 +# ) | log Linux-whl $BITS
  138 +
  139 +# Pakiety debianowe bez wkompilowanego słownika:
  140 +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
  141 +
... ...
fsabuilder/CMakeLists.txt
... ... @@ -29,15 +29,11 @@ add_custom_target (package-builder-egg
29 29 DEPENDS builder-setup
30 30 )
31 31 add_custom_target (package-builder-whl
32   - COMMAND python3 ${SETUP_PY} bdist_wheel -d "${TARGET_DIR}"
33   - DEPENDS builder-setup
34   -)
35   -add_custom_target (package-builder-sdist
36   - COMMAND python3 ${SETUP_PY} sdist -d "${TARGET_DIR}"
  32 + COMMAND python3 -m build --outdir "${TARGET_DIR}"
37 33 DEPENDS builder-setup
38 34 )
39 35  
40   -set (PACKAGE_DEPENDS "package-builder-whl" "package-builder-sdist")
  36 +set (PACKAGE_DEPENDS "package-builder-whl")
41 37  
42 38 if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
43 39 if (BUILT_ON)
... ... @@ -61,7 +57,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
61 57 COMMAND mkdir -p "${TARGET_DIR}" && cp ${CMAKE_CURRENT_BINARY_DIR}/deb_dist/${MORFEUSZBUILDER}*.deb "${TARGET_DIR}"
62 58 DEPENDS package-builder-deb-build
63 59 )
64   - list (APPEND PACKAGE_DEPENDS package-builder-deb)
  60 +# list (APPEND PACKAGE_DEPENDS package-builder-deb)
65 61 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
66 62 #~ add_custom_target (package-python-win-installer
67 63 #~ COMMAND python ${SETUP_PY} bdist_wininst -d ${TARGET_DIR} --plat-name "${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}"
... ...
morfeusz/wrappers/python3/CMakeLists.txt
... ... @@ -2,15 +2,10 @@
2 2 # SWIG
3 3 #set(CMAKE_SWIG_OUTDIR swig)
4 4 #~ FIND_PACKAGE (SWIG REQUIRED)
5   -if (NOT PYTHON_INCLUDE_DIRS)
6   - set(Python_ADDITIONAL_VERSIONS 3.4)
7   - FIND_PACKAGE (PythonLibs ${PY} REQUIRED)
8   -endif ()
9 5 #~ INCLUDE (${SWIG_USE_FILE})
10 6  
11 7 set (PY3MORFEUSZ_VERSION "${Morfeusz_LIB_VERSION}")
12 8 # SWIG Java
13   -INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
14 9 INCLUDE_DIRECTORIES (../..)
15 10  
16 11  
... ... @@ -26,57 +21,47 @@ add_custom_target (generate_python3_wrapper ALL
26 21 )
27 22  
28 23 set (SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
29   -set (SETUP_PY_TMP "${CMAKE_CURRENT_BINARY_DIR}/setupTmp.py")
30 24 set (SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
31 25 set (DEPS "${SWIG_PYTHON_OUTFILE_CXX}" "${SWIG_PYTHON_OUTFILE_PY}")
32 26 set (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build")
33 27  
34 28 configure_file (${SETUP_PY_IN} ${SETUP_PY})
  29 +file(COPY pyproject.toml setup.cfg DESTINATION .)
35 30  
36   -set (EGG_NAME "morfeusz2-${PY3MORFEUSZ_VERSION}-py${PY}")
37   -file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}")
38   -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/EGG-INFO" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}/")
  31 +# set (EGG_NAME "morfeusz2-${PY3MORFEUSZ_VERSION}-py${PY}")
  32 +# file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}")
  33 +# file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/EGG-INFO" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${EGG_NAME}/")
39 34  
40 35 add_custom_target (generate_python3_setup_file
41 36 DEPENDS ${SETUP_PY})
42 37  
43   -add_custom_command (OUTPUT ${OUTPUT}
44   - COMMAND python3
45   - ARGS ${SETUP_PY} build
46   - DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz)
  38 +# add_custom_command (OUTPUT ${OUTPUT}
  39 +# COMMAND python3
  40 +# ARGS ${SETUP_PY} build
  41 +# DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz)
47 42  
48   -add_custom_target (build_python3_wrapper
49   - DEPENDS ${OUTPUT})
  43 +# add_custom_target (build_python3_wrapper
  44 +# DEPENDS ${OUTPUT})
50 45  
51 46 add_custom_target (py3morfeusz
52   - DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz build_python3_wrapper)
  47 + DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz)
53 48  
54 49 if (UNIX)
55   - add_custom_target (install-python3
56   - COMMAND python3 ${SETUP_PY} install --home=${CMAKE_INSTALL_PREFIX}
57   - DEPENDS py3morfeusz
58   - )
59   - add_custom_target (package-python3-egg
60   - COMMAND python3 ${SETUP_PY} bdist_egg -d "${TARGET_DIR}" --plat-name "${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}"
61   - DEPENDS py3morfeusz
62   - )
  50 + # add_custom_target (install-python3
  51 + # COMMAND python3 ${SETUP_PY} install --home=${CMAKE_INSTALL_PREFIX}
  52 + # DEPENDS py3morfeusz
  53 + # )
63 54 add_custom_target (package-python3-whl
64   - COMMAND python3 ${SETUP_PY} bdist_wheel -d "${TARGET_DIR}"
65   - #--plat-name "${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}"
66   - DEPENDS py3morfeusz
  55 + COMMAND python3 -m build --outdir "${TARGET_DIR}"
  56 + DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz
67 57 )
68   - configure_file (WHEEL.linux.in WHEEL)
69 58 add_custom_target (package-python3-fatwhl
70   - COMMAND python3 setup.py build_py
71   - COMMAND python3 setup.py build_ext --rpath [['$${ORIGIN}']] -b fatlib
72   - COMMAND python3 setup.py bdist_wheel --skip-build --keep-temp -b fatlib
73   - COMMAND cp WHEEL fatlib/morfeusz2-${PY3MORFEUSZ_VERSION}.dist-info/
74   - COMMAND cp ../../libmorfeusz2.so fatlib/
75   - COMMAND python3 -m wheel pack --build-number ${DICT_VERSION} --dest-dir ${TARGET_DIR} fatlib/
76   - COMMAND rm -r fatlib
  59 + COMMAND python3 -m build
  60 + COMMAND zip -j dist/morfeusz2-*-abi3-*.whl ../../libmorfeusz2.so
  61 + COMMAND mv dist/morfeusz2-*-abi3-*.whl ${TARGET_DIR}
77 62 DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz
78 63 )
79   -# set (PACKAGE_DEPENDS package-python3-egg package-python3-whl)
  64 +# set (PACKAGE_DEPENDS package-python3-whl)
80 65 set (PACKAGE_DEPENDS package-python3-fatwhl)
81 66  
82 67 if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
... ... @@ -100,11 +85,16 @@ if (UNIX)
100 85 COMMAND mkdir -p "${TARGET_DIR}" && cp ${CMAKE_CURRENT_BINARY_DIR}/deb_dist/python3-morfeusz2*.deb "${TARGET_DIR}"
101 86 DEPENDS package-python3-deb-build
102 87 )
103   - list (APPEND PACKAGE_DEPENDS package-python3-deb)
  88 + # list (APPEND PACKAGE_DEPENDS package-python3-deb)
104 89 endif ()
105 90 add_custom_target (package-python3
106 91 DEPENDS ${PACKAGE_DEPENDS})
107 92 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND CMAKE_CROSSCOMPILING)
  93 + if (NOT PYTHON_INCLUDE_DIRS)
  94 + set(Python_ADDITIONAL_VERSIONS 3.4)
  95 + FIND_PACKAGE (PythonLibs ${PY} REQUIRED)
  96 + endif ()
  97 + INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
108 98 add_custom_target (package-python3-egg-info
109 99 COMMAND python3 ${SETUP_PY} egg_info
110 100 DEPENDS generate_python3_wrapper generate_python3_setup_file libmorfeusz
... ...
morfeusz/wrappers/python3/pyproject.toml 0 → 100644
  1 +[build-system]
  2 +requires = ["setuptools"]
  3 +build-backend = "setuptools.build_meta"
  4 +
  5 +
  6 +[project]
  7 +name = "morfeusz2" # as it would appear on PyPI
  8 +dynamic = ["authors", "license", "readme", "description", "version"]
  9 +
... ...
morfeusz/wrappers/python3/setup.cfg 0 → 100644
  1 +[bdist_wheel]
  2 +py-limited-api=cp36
  3 +plat-name=manylinux_2_28_x86_64
  4 +
  5 +[build_ext]
  6 +rpath=${ORIGIN}
... ...