| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| . "$mb_project_dir/project/config/cfghost.sh" |
| |
| |
| |
| . "$mb_project_dir/sofort/cfgtest/cfgtest.sh" |
| |
| |
| pycfg_pydebug= |
| pycfg_pymalloc= |
| |
| for arg ; do |
| case "$arg" in |
| --with-pydebug ) |
| pycfg_pydebug='d' ;; |
| |
| --without-pydebug ) |
| pycfg_pydebug= ;; |
| |
| --with-pymalloc ) |
| pycfg_pymalloc='m' ;; |
| |
| --without-pymalloc ) |
| pycfg_pymalloc= ;; |
| |
| *) |
| error_msg ${arg#}: "unsupported config argument." |
| exit 2 |
| esac |
| done |
| |
| |
| cfgdefs_set_python_prefix() |
| { |
| if [ -z "$mb_prefix" ]; then |
| mb_prefix='/.' |
| fi |
| |
| if [ -z "$mb_exec_prefix" ]; then |
| mb_exec_prefix='/.' |
| fi |
| } |
| |
| |
| cfgdefs_set_cfghost_flavors() |
| { |
| cfghost_set_target_cfghost |
| cfghost_set_native_cfghost |
| } |
| |
| |
| cfgdefs_detect_python_version() |
| { |
| mb_internal_verinfo=$(mktemp) |
| |
| if [ -z "$mb_internal_verinfo" ]; then |
| exit 2 |
| fi |
| |
| "$mb_native_cc" -E -dM "$mb_source_dir/Include/patchlevel.h" \ |
| > "$mb_internal_verinfo" |
| |
| python_major=$(grep '#define PY_MAJOR_VERSION ' "$mb_internal_verinfo" | cut -d' ' -f3) |
| python_minor=$(grep '#define PY_MINOR_VERSION ' "$mb_internal_verinfo" | cut -d' ' -f3) |
| python_micro=$(grep '#define PY_MICRO_VERSION ' "$mb_internal_verinfo" | cut -d' ' -f3) |
| |
| if [ -z "$python_major" ] || [ -z "$python_minor" ] || [ -z "$python_micro" ]; then |
| error_msg "Could not properly parse Python's patchlevel.h" |
| exit 2 |
| fi |
| |
| pydist_macros="$mb_project_dir/project/pydist.m4" |
| pydist_helper="$mb_project_dir/sofort/core/modern.m4" |
| pydist_srclst="$mb_project_dir/project/variants/$python_major.$python_minor.$python_micro/pydist.in" |
| |
| if ! [ -f "$pydist_srclst" ]; then |
| exit 2 |
| fi |
| |
| if ! m4 "$pydist_helper" "$pydist_macros" "$pydist_srclst" > pydist.mk ; then |
| exit 2 |
| fi |
| |
| python_ver="$python_major.$python_minor" |
| |
| if [ "$mb_package" = '@' ]; then |
| mb_package= |
| fi |
| |
| if [ "$mb_nickname" = '@' ]; then |
| mb_nickname= |
| fi |
| |
| [ -z "$mb_package" ] && mb_package='python'"$python_ver" |
| [ -z "$mb_nickname" ] && mb_nickname="$mb_package" |
| [ -z "$mb_pkgname" ] && mb_pkgname="$mb_package" |
| [ -z "$mb_pkgdesc" ] && mb_pkgdesc="$mb_package" |
| } |
| |
| |
| cfgdefs_set_option_variables() |
| { |
| python_abifl=$pycfg_pydebug$pycfg_pymalloc |
| } |
| |
| |
| cfgdefs_output_options() |
| { |
| if [ -n "$pycfg_pydebug" ]; then |
| cfgtest_cflags_append '-DPy_DEBUG' |
| fi |
| |
| if [ -n "$pycfg_pymalloc" ]; then |
| cfgtest_cflags_append '-DWITH_PYMALLOC' |
| fi |
| } |
| |
| |
| cfgdefs_output_custom_defs() |
| { |
| sed \ |
| -e 's/@python_ver@/'"$python_ver"'/g' \ |
| -e 's/@python_major@/'"$python_major"'/g' \ |
| -e 's/@python_minor@/'"$python_minor"'/g' \ |
| -e 's/@python_micro@/'"$python_micro"'/g' \ |
| -e 's/@python_abifl@/'"$python_abifl"'/g' \ |
| "$mb_project_dir/project/config/cfgdefs.in" \ |
| | sed -e 's/[ \t]*$//g' \ |
| >> "$mb_pwd/cfgdefs.mk" |
| } |
| |
| |
| cfgdefs_perform_common_tests() |
| { |
| |
| cfgtest_header_absence 'stropts.h' |
| cfgtest_header_presence 'crypt.h' |
| cfgtest_header_presence 'stdatomic.h' |
| cfgtest_header_presence 'endian.h' |
| cfgtest_header_presence 'net/if.h' |
| cfgtest_header_presence 'pthread.h' |
| cfgtest_header_presence 'sched.h' |
| cfgtest_header_presence 'spawn.h' |
| cfgtest_header_presence 'sys/ioctl.h' |
| cfgtest_header_presence 'sys/sendfile.h' |
| cfgtest_header_presence 'sys/syscall.h' |
| cfgtest_header_presence 'sys/sysmacros.h' |
| cfgtest_header_presence 'sys/uio.h' |
| cfgtest_header_presence 'sys/xattr.h' |
| |
| |
| mb_cfgtest_headers='crypt.h' |
| cfgtest_interface_presence 'crypt_r' |
| |
| mb_cfgtest_headers='sys/epoll.h' |
| cfgtest_interface_presence 'epoll_create1' |
| |
| mb_cfgtest_headers='sys/uio.h' |
| cfgtest_interface_presence 'preadv' |
| cfgtest_interface_presence 'preadv2' |
| cfgtest_interface_presence 'pwritev' |
| cfgtest_interface_presence 'pwritev2' |
| |
| mb_cfgtest_headers='spawn.h' |
| cfgtest_interface_presence 'posix_spawn' |
| |
| mb_cfgtest_headers='pthread.h time.h' |
| cfgtest_interface_presence 'pthread_getcpuclockid' |
| |
| mb_cfgtest_headers='sched.h' |
| cfgtest_interface_presence 'sched_get_priority_max' |
| cfgtest_interface_presence 'sched_rr_get_interval' |
| cfgtest_interface_presence 'sched_setaffinity' |
| cfgtest_interface_presence 'sched_setparam' |
| cfgtest_interface_presence 'sched_setscheduler' |
| |
| mb_cfgtest_headers='sys/sendfile.h' |
| cfgtest_interface_presence 'sendfile' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'size of system types' |
| |
| cfgtest_type_size 'short' |
| cfgtest_type_size 'int' |
| cfgtest_type_size 'long' |
| cfgtest_type_size 'long long' |
| cfgtest_type_size 'float' |
| cfgtest_type_size 'double' |
| cfgtest_type_size 'long double' |
| cfgtest_type_size 'void *' |
| |
| mb_cfgtest_headers='stdint.h' |
| cfgtest_type_size 'uintptr_t' |
| |
| mb_cfgtest_headers='stdbool.h' |
| cfgtest_type_size '_Bool' |
| |
| mb_cfgtest_headers='stddef.h' |
| cfgtest_type_size 'size_t' |
| cfgtest_type_size 'wchar_t' |
| |
| mb_cfgtest_headers='unistd.h' |
| cfgtest_type_size 'pid_t' |
| cfgtest_type_size 'off_t' |
| |
| mb_cfgtest_headers='time.h' |
| cfgtest_type_size 'time_t' |
| |
| mb_cfgtest_headers='stdio.h' |
| cfgtest_type_size 'fpos_t' |
| |
| mb_cfgtest_headers='pthread.h' |
| cfgtest_type_size 'pthread_t' |
| cfgtest_type_size 'pthread_key_t' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'xattrs' |
| |
| if cfgtest_header_presence 'linux/limits.h'; then |
| cfgtest_cflags_append '--include=linux/limits.h' |
| fi |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'toolchain' |
| |
| |
| mb_code_snippet='' |
| mb_code_snippet="$mb_code_snippet "'void fn(void)' |
| mb_code_snippet="$mb_code_snippet "'{__asm__ __volatile__ ("fnstcw pcw");' |
| mb_code_snippet="$mb_code_snippet "' __asm__ __volatile__ ("fldcw pcw");}' |
| |
| if cfgtest_code_snippet_asm "$mb_code_snippet"; then |
| cfgtest_cflags_append '-DHAVE_GCC_ASM_FOR_X87' |
| fi |
| |
| |
| mb_code_snippet='' |
| mb_code_snippet="$mb_code_snippet "'void fn(void)' |
| mb_code_snippet="$mb_code_snippet "'{__asm__ __volatile__ ("callq *%rax");}' |
| |
| if cfgtest_code_snippet_asm "$mb_code_snippet"; then |
| cfgtest_cflags_append '-DHAVE_GCC_ASM_FOR_X64' |
| fi |
| |
| |
| if $mb_cfgtest_cc -E -dM - < /dev/null \ |
| | grep '__BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__' \ |
| > /dev/null; then |
| cfgtest_cflags_append '-DDOUBLE_IS_LITTLE_ENDIAN_IEEE754' |
| |
| elif $mb_cfgtest_cc -E -dM - < /dev/null \ |
| | grep '__BYTE_ORDER__ __ORDER_BIG_ENDIAN__' \ |
| > /dev/null; then |
| cfgtest_cflags_append '-DDOUBLE_IS_BIG_ENDIAN_IEEE754' |
| |
| else |
| cfgtest_newline |
| cfgtest_comment 'cfgdefs.sh: cannot detect little/big endian,' |
| cfgtest_comment 'cfgdefs.sh: so defined both macros below.' |
| cfgtest_newline |
| |
| cfgtest_cflags_append '-DDOUBLE_IS_LITTLE_ENDIAN_IEEE754' |
| cfgtest_cflags_append '-DDOUBLE_IS_BIG_ENDIAN_IEEE754' |
| fi |
| |
| |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'getrandom' |
| |
| mb_cfgtest_headers='sys/syscall.h' |
| |
| if cfgtest_decl_presence 'SYS_getrandom'; then |
| cfgtest_cflags_append '-DHAVE_GETRANDOM_SYSCALL' |
| fi |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'libintl' |
| |
| if cfgtest_library_presence -lintl; then |
| cfgtest_ldflags_append '-Wl,--as-needed -lintl -Wl,--no-as-needed' |
| fi |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'libuuid' |
| |
| if cfgtest_library_presence -luuid; then |
| cfgtest_ldflags_append '-Wl,--as-needed -luuid -Wl,--no-as-needed' |
| fi |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'uuid' |
| |
| if cfgtest_header_presence 'uuid.h'; then |
| mb_uuid_header='uuid.h' |
| |
| elif cfgtest_header_presence 'uuid/uuid.h'; then |
| mb_uuid_header='uuid/uuid.h' |
| else |
| mb_uuid_header= |
| fi |
| |
| mb_cfgtest_headers="$mb_uuid_header" |
| |
| cfgtest_interface_presence 'uuid_create' |
| cfgtest_interface_presence 'uuid_enc_be' |
| cfgtest_interface_presence 'uuid_generate_time_safe' |
| |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'ncurses/ncursesw' |
| mb_cfgtest_headers='ncurses.h' |
| |
| if [ $mb_cfgtest_cfgtype = 'host' ]; then |
| mb_cfgtest_makevar='CFLAGS_NCURSES' |
| else |
| mb_cfgtest_makevar='NATIVE_CFLAGS' |
| fi |
| |
| cfgtest_unit_header_presence 'curses.h' |
| cfgtest_unit_header_presence 'ncurses.h' |
| |
| cfgtest_unit_header_presence 'ncurses/panel.h' && mb_panel_wrapper='yes' |
| cfgtest_unit_header_presence 'ncursesw/panel.h' && mb_panel_wrapper='yes' |
| |
| cfgtest_unit_header_presence 'ncurses/term.h' && mb_term_wrapper='yes' |
| cfgtest_unit_header_presence 'ncursesw/term.h' && mb_term_wrapper='yes' |
| |
| if cfgtest_unit_interface_presence 'is_term_resized'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_IS_TERM_RESIZED' |
| fi |
| |
| if cfgtest_unit_interface_presence 'resizeterm'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_RESIZETERM' |
| fi |
| |
| if cfgtest_unit_interface_presence 'resize_term'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_RESIZE_TERM' |
| fi |
| |
| if cfgtest_unit_interface_presence 'filter'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_FILTER' |
| fi |
| |
| if cfgtest_unit_interface_presence 'has_key'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_HAS_KEY' |
| fi |
| |
| if cfgtest_unit_interface_presence 'immedok'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_IMMEDOK' |
| fi |
| |
| if cfgtest_unit_interface_presence 'is_pad'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_IS_PAD' |
| fi |
| |
| if cfgtest_unit_interface_presence 'syncok'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_SYNCOK' |
| fi |
| |
| if cfgtest_unit_interface_presence 'typeahead'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_TYPEAHEAD' |
| fi |
| |
| if cfgtest_unit_interface_presence 'use_env'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_USE_ENV' |
| fi |
| |
| if cfgtest_unit_interface_presence 'wchgat'; then |
| cfgtest_makevar_append '-DHAVE_CURSES_WCHGAT' |
| fi |
| |
| |
| if cfgtest_unit_interface_presence 'mvwget_wch'; then |
| cfgtest_makevar_append '-DHAVE_NCURSESW' |
| fi |
| |
| |
| cfgtest_makevar_append '-DNCURSES_INTERNALS' |
| |
| |
| if [ _${mb_panel_wrapper:-} = _yes ]; then |
| cfgtest_makevar_append '-I$(PROJECT_DIR)/wrappers/ncurses' |
| unset mb_panel_wrapper |
| fi |
| |
| |
| if [ _${mb_term_wrapper:-} = _yes ]; then |
| cfgtest_makevar_append '-I$(PROJECT_DIR)/wrappers/ncurses' |
| unset mb_term_wrapper |
| fi |
| |
| |
| mb_ncurses_libs='-lpanelw -lncursesw' |
| mb_ncurses_tinfo='-ltinfow' |
| |
| if cfgtest_library_presence $mb_ncurses_tinfo; then |
| mb_ncurses_libs="$mb_ncurses_libs $mb_ncurses_tinfo" |
| fi |
| } |
| |
| |
| cfgdefs_perform_target_tests() |
| { |
| |
| cfgtest_host_section |
| |
| |
| cfgdefs_perform_common_tests |
| |
| |
| mb_cfgtest_makevar='LDFLAGS_NCURSES_LIBS' |
| cfgtest_makevar_append $mb_ncurses_libs |
| |
| mb_cfgtest_makevar='LDFLAGS_NCURSES' |
| cfgtest_makevar_append \ |
| '-Wl,--as-needed $(LDFLAGS_NCURSES_LIBS)' \ |
| '-Wl,--no-as-needed' |
| |
| mb_cfgtest_makevar='LDFLAGS_NCURSES_STATIC' |
| cfgtest_makevar_append '$(LDFLAGS_NCURSES)' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'openssl/libressl' |
| |
| mb_cfgtest_headers='openssl/x509.h' |
| |
| if cfgtest_interface_presence 'X509_NAME_ENTRY_set'; then |
| cfgtest_cflags_append '-DOPENSSL_VERSION_1_1' |
| fi |
| |
| mb_cfgtest_headers='openssl/x509_vfy.h' |
| cfgtest_interface_presence 'X509_VERIFY_PARAM_set1_host' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'tcl/tk' |
| mb_tcltk_libs= |
| |
| for mb_tcltk_ver in 8.9 8.8 8.7 8.6 8.5; do |
| if [ -z "$mb_tcltk_libs" ]; then |
| mb_tcltk_libs="-ltk$mb_tcltk_ver -ltcl$mb_tcltk_ver" |
| cfgtest_library_presence $mb_tcltk_libs \ |
| || mb_tcltk_libs='' |
| fi |
| done |
| |
| mb_cfgtest_makevar='LDFLAGS_TCLTK_LIBS' |
| cfgtest_makevar_append "$mb_tcltk_libs" |
| |
| mb_cfgtest_makevar='CFLAGS_TCLTK' |
| cfgtest_makevar_append '-DWITH_APPINIT' |
| |
| mb_cfgtest_makevar='LDFLAGS_TCLTK' |
| cfgtest_makevar_append '$(LDFLAGS_TCLTK_LIBS)' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'sqlite3' |
| |
| mb_cfgtest_makevar='CFLAGS_SQLITE' |
| cfgtest_makevar_append '-DMODULE_NAME=\"sqlite3\"' |
| cfgtest_makevar_append '-DSQLITE_OMIT_LOAD_EXTENSION' |
| |
| mb_cfgtest_makevar='LDFLAGS_SQLITE' |
| cfgtest_makevar_append '-lsqlite3' |
| |
| mb_cfgtest_makevar='LDFLAGS_SQLITE_STATIC' |
| cfgtest_makevar_append '$(LDFLAGS_SQLITE)' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'expat' |
| |
| mb_cfgtest_makevar='CFLAGS_EXPAT' |
| cfgtest_makevar_append '-DXML_DEV_URANDOM' |
| |
| mb_cfgtest_makevar='LDFLAGS_EXPAT' |
| cfgtest_makevar_append '-lexpat' |
| |
| mb_cfgtest_makevar='LDFLAGS_EXPAT_STATIC' |
| cfgtest_makevar_append '$(LDFLAGS_EXPAT)' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'ndbm' |
| |
| mb_cfgtest_makevar='CFLAGS_DBM' |
| cfgtest_unit_header_presence 'ndbm.h' |
| |
| mb_cfgtest_makevar='LDFLAGS_DBM' |
| cfgtest_makevar_append '-lgdbm_compat' |
| |
| mb_cfgtest_makevar='LDFLAGS_DBM_STATIC' |
| cfgtest_makevar_append '$(LDFLAGS_DBM)' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'static python library switches' |
| mb_cfgtest_makevar='LDFLAGS_PYEXT_STATIC' |
| |
| cfgtest_makevar_append '-Wl,--as-needed -lssl -lcrypto -Wl,--no-as-needed' |
| cfgtest_makevar_append '-Wl,--as-needed -luuid -Wl,--no-as-needed' |
| cfgtest_makevar_append '-Wl,--as-needed -lbz2 -Wl,--no-as-needed' |
| cfgtest_makevar_append '-Wl,--as-needed -lffi -Wl,--no-as-needed' |
| cfgtest_makevar_append '-Wl,--as-needed -lgdbm -Wl,--no-as-needed' |
| cfgtest_makevar_append '-Wl,--as-needed -lreadline -Wl,--no-as-needed' |
| cfgtest_makevar_append '-Wl,--as-needed -lintl -Wl,--no-as-needed' |
| cfgtest_makevar_append '-Wl,--as-needed -lz -Wl,--no-as-needed' |
| |
| [ $python_major = '3' ] && \ |
| cfgtest_makevar_append '-Wl,--as-needed -llzma -Wl,--no-as-needed' |
| |
| |
| cfgtest_newline |
| cfgtest_comment 'target options' |
| cfgdefs_output_options |
| |
| |
| cfgtest_newline |
| } |
| |
| |
| cfgdefs_perform_native_tests() |
| { |
| |
| cfgtest_native_section |
| |
| |
| cfgdefs_perform_common_tests |
| |
| |
| cfgtest_ldflags_append $mb_ncurses_libs |
| |
| |
| cfgtest_newline |
| cfgtest_comment '(native) pycompile options' |
| cfgdefs_output_options |
| |
| |
| cfgtest_newline |
| } |
| |
| |
| |
| cfgdefs_set_python_prefix |
| |
| |
| cfgdefs_set_cfghost_flavors |
| |
| |
| cfgdefs_detect_python_version |
| |
| |
| cfgdefs_set_option_variables |
| |
| |
| cfgdefs_output_custom_defs |
| |
| |
| set +e |
| |
| |
| cfgdefs_perform_target_tests |
| |
| |
| cfgdefs_perform_native_tests |
| |
| |
| set -e |
| |
| |
| return 0 |