From 86db5e14cf23f6bc6e62ace6787cf3cd00a01c20 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 30 Jan 2021 18:45:45 +0000 Subject: [PATCH] Cleanup for python/pyqt windows packages Signed-off-by: falkTX --- bootstrap-carla.sh | 139 ++++++++---------- bootstrap-qt.sh | 8 +- patches/PyQt5_gpl/win32/01_cfg-env-vars.patch | 39 ++--- patches/PyQt5_gpl/win32/02_qmake-xspec.patch | 33 +++++ patches/sip/001-use-env-vars.patch | 36 +++++ patches/sip/002-module-extension.patch | 13 ++ patches/sip/win32/0001-mingw-python.patch | 2 +- .../win32/9001-pawpaw-needed-changes.patch | 13 ++ 8 files changed, 173 insertions(+), 110 deletions(-) create mode 100644 patches/sip/001-use-env-vars.patch create mode 100644 patches/sip/002-module-extension.patch create mode 100644 patches/sip/win32/9001-pawpaw-needed-changes.patch diff --git a/bootstrap-carla.sh b/bootstrap-carla.sh index f5d31cd..f288a2e 100755 --- a/bootstrap-carla.sh +++ b/bootstrap-carla.sh @@ -41,7 +41,7 @@ function build_conf_python() { local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}" if [ "${CROSS_COMPILING}" -eq 1 ]; then - extraconfrules+=" --host=${TOOLCHAIN_PREFIX} --build=x86_64-linux-gnu" + extraconfrules+=" --host=${TOOLCHAIN_PREFIX} --build=$(gcc -dumpmachine)" fi _prebuild "${name}" "${pkgdir}" @@ -71,18 +71,10 @@ function build_conf_python() { if [ ! -f "${pkgdir}/.stamp_built" ]; then pushd "${pkgdir}" if [ "${WIN32}" -eq 1 ]; then - # adds -Wl,-Bdynamic so we link to shared python lib - sed -i -e 's|BLDLIBRARY= -L.|BLDLIBRARY= -Wl,-Bdynamic -L.|' Makefile - # EXE suffix missing - sed -i -e 's|./Programs/_freeze_importlib zipimport|./Programs/_freeze_importlib$(EXE) zipimport|' Makefile # inject exe-wrapper if [ -n "${EXE_WRAPPER}" ]; then sed -i -e "s|\t./Programs/_freeze_importlib|\t${EXE_WRAPPER} ./Programs/_freeze_importlib|" Makefile fi - # use toolchain prefix on windres tool if cross-compiling - if [ "${CROSS_COMPILING}" -eq 1 ]; then - sed -i -e "s|\twindres|\t${TOOLCHAIN_PREFIX_}windres|" Makefile - fi make regen-importlib fi make ${MAKE_ARGS} @@ -119,70 +111,38 @@ function build_pyqt() { export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')" export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,-dead_strip -Wl,-dead_strip_dylibs//')" export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--strip-all//')" + export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--gc-sections//')" export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')" if [ "${WIN32}" -eq 1 ]; then export CXXFLAGS+=" -Wno-deprecated-copy" fi + # non-standard vars used by sip/pyqt + export LFLAGS="${LDFLAGS}" + export LINK="${CXX}" + if [ ! -f "${pkgdir}/.stamp_configured" ]; then pushd "${pkgdir}" + local python="python$(echo ${PYTHON_VERSION} | cut -b 1,2,3)" + # Place link to Qt DLLs for PyQt tests - if [ "${WIN32}" -eq 1 ] && [ "${name}" = "PyQt5_gpl" ]; then - mkdir -p release + if [ "${WIN32}" -eq 1 ] && [ -d "pyuic" ] && [ ! -d "release" ]; then + mkdir release ln -sf "${PAWPAW_PREFIX}/bin"/Qt* release/ fi - local python3=python3 + ${python} configure.py ${extraconfrules} if [ "${CROSS_COMPILING}" -eq 1 ]; then - python3=python3.8 - fi - - ${python3} configure.py ${extraconfrules} - - # build sip as host tool first - if [ "${CROSS_COMPILING}" -eq 1 ] && [ "${name}" = "sip" ]; then - pushd "sipgen" - PATH="${OLD_PATH}" make sip LFLAGS="-Wl,-s" ${MAKE_ARGS} - popd - if [ "${WIN32}" -eq 1 ]; then - sed -i -e "s/sip.so/sip.pyd/" installed.txt - fi - fi - - # use env vars - sed -i -e 's/CC = gcc/CC ?= gcc/' */Makefile - sed -i -e 's/CXX = g++/CXX ?= g++/' */Makefile - sed -i -e 's/LINK = g++/LINK = $(CXX)/' */Makefile - sed -i -e 's/CFLAGS *=/CFLAGS +=/' */Makefile - sed -i -e 's/CXXFLAGS *=/CXXFLAGS +=/' */Makefile - sed -i -e 's/LIBS *=/LIBS += $(LDFLAGS)/' */Makefile - - if [ -f "QtCore/Makefile.Release" ]; then - sed -i -e 's/CFLAGS *=/CFLAGS +=/' */Makefile.Release - sed -i -e 's/CXXFLAGS *=/CXXFLAGS +=/' */Makefile.Release - sed -i -e 's/LIBS *=/LIBS += $(LDFLAGS)/' */Makefile.Release - fi - - # use abstract python3 path - sed -i -e 's|/usr/bin/python3|python3|g' Makefile - - # use PREFIX var - sed -i -e "s|/usr|${PAWPAW_PREFIX}|g" installed.txt Makefile */Makefile + # use abstract python3 path + sed -i -e 's|/usr/bin/python3|python3|g' Makefile - if [ -f "QtCore/Makefile.Release" ]; then - sed -i -e "s|/usr|${PAWPAW_PREFIX}|g" */Makefile.Release - fi - - # fix win32 linkage - if [ "${WIN32}" -eq 1 ]; then - sed -i -e 's|config -lpython3.8|config-3.8 -Wl,-Bdynamic -lpython3.8 -Wl,-Bstatic|' */Makefile + # use PREFIX var + sed -i -e "s|/usr|${PAWPAW_PREFIX}|g" installed.txt Makefile */Makefile if [ -f "QtCore/Makefile.Release" ]; then - for mak in $(find -maxdepth 2 -type f -name Makefile.Release); do - echo "LIBS += -L${PAWPAW_PREFIX}/lib/python3.8/config-3.8 -Wl,-Bdynamic -lpython3.8 -Wl,-Bstatic" >> ${mak} - done + sed -i -e "s|/usr|${PAWPAW_PREFIX}|g" */Makefile.Release fi fi @@ -192,6 +152,14 @@ function build_pyqt() { if [ ! -f "${pkgdir}/.stamp_built" ]; then pushd "${pkgdir}" + + # build sip as host tool first + if [ "${CROSS_COMPILING}" -eq 1 ] && [ -d "sipgen" ] && [ ! -f "sipgen/sip" ]; then + pushd "sipgen" + PATH="${OLD_PATH}" make sip CC="gcc" LINK="gcc" LFLAGS="-Wl,-s" ${MAKE_ARGS} + popd + fi + make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} touch .stamp_built popd @@ -200,22 +168,18 @@ function build_pyqt() { if [ ! -f "${pkgdir}/.stamp_installed" ]; then pushd "${pkgdir}" make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} -j 1 install - - if [ "${name}" = "PyQt5_gpl" ]; then + if [ "${CROSS_COMPILING}" -eq 1 ]; then sed -i -e "s|/usr|${PAWPAW_PREFIX}|g" ${PAWPAW_PREFIX}/bin/py*5 - if [ -n "${APP_EXT}" ]; then - sed -i -e "s|3.8 -m|3.8${APP_EXT} -m|" ${PAWPAW_PREFIX}/bin/py*5 - fi - if [ -n "${EXE_WRAPPER}" ]; then - sed -i -e "s|exec /|exec ${EXE_WRAPPER} /|" ${PAWPAW_PREFIX}/bin/py*5 - fi - if [ "${WIN32}" -eq 1 ]; then - sed -i -e "s|d ||" ${PAWPAW_PREFIX}/lib/pkgconfig/Qt5*.pc - fi + fi + if [ -n "${EXE_WRAPPER}" ]; then + sed -i -e "s|exec /|exec ${EXE_WRAPPER} /|" ${PAWPAW_PREFIX}/bin/py*5 fi touch .stamp_installed popd fi + + unset LFLAGS + unset LINK } # --------------------------------------------------------------------------------------------------------------------- @@ -245,7 +209,6 @@ elif [ "${WIN32}" -eq 1 ]; then PYTHON_EXTRAFLAGS="--with-nt-threads" PYTHON_EXTRAFLAGS+=" --without-ensurepip" PYTHON_EXTRAFLAGS+=" --without-c-locale-coercion" - # PYTHON_EXTRAFLAGS+=" --enable-optimizations" # Workaround for conftest error on 64-bit builds PYTHON_EXTRAFLAGS+=" ac_cv_working_tzset=no" # Workaround for when dlfcn exists on Windows, which causes @@ -260,7 +223,6 @@ elif [ "${WIN32}" -eq 1 ]; then PYTHON_EXTRAFLAGS+=" ac_cv_have_decl_RTLD_MEMBER=no" PYTHON_EXTRAFLAGS+=" ac_cv_have_decl_RTLD_NODELETE=no" PYTHON_EXTRAFLAGS+=" ac_cv_have_decl_RTLD_NOLOAD=no" - PYTHON_EXTRAFLAGS+=" OPT=" fi download Python "${PYTHON_VERSION}" "https://www.python.org/ftp/python/${PYTHON_VERSION}" "tgz" @@ -280,7 +242,10 @@ else fi if [ "${WIN32}" -eq 1 ]; then - SIP_EXTRAFLAGS+=" --platform win32-g++ EXTENSION_PLUGIN=pyd" + SIP_EXTRAFLAGS="--platform win32-g++" + SIP_EXTRAFLAGS+=" EXTENSION_PLUGIN=pyd" + SIP_EXTRAFLAGS+=" INCDIR=${PAWPAW_PREFIX}/include/python3.8" + SIP_EXTRAFLAGS+=" LIBDIR=${PAWPAW_PREFIX}/lib/python3.8/config-3.8" fi download sip "${SIP_VERSION}" "${SIP_DOWNLOAD_URL}" @@ -297,10 +262,26 @@ else PYQT5_SUFFIX="_gpl" fi +# qmake needs this +if [ "${CROSS_COMPILING}" -eq 1 ]; then + export PKG_CONFIG_LIBDIR="${TARGET_PKG_CONFIG_PATH}" + export PKG_CONFIG_SYSROOT_DIR="/" +fi + PYQT5_EXTRAFLAGS="--qmake ${PAWPAW_PREFIX}/bin/qmake --sip ${PAWPAW_PREFIX}/bin/sip" download PyQt5${PYQT5_SUFFIX} "${PYQT5_VERSION}" "${PYQT5_DOWNLOAD_URL}" -build_pyqt PyQt5${PYQT5_SUFFIX} "${PYQT5_VERSION}" "${PYQT5_EXTRAFLAGS} --concatenate --confirm-license -c" +build_pyqt PyQt5${PYQT5_SUFFIX} "${PYQT5_VERSION}" "${PYQT5_EXTRAFLAGS} --concatenate --confirm-license" + +if [ "${CROSS_COMPILING}" -eq 1 ]; then + unset PKG_CONFIG_LIBDIR + unset PKG_CONFIG_SYSROOT_DIR +fi + +# TODO: finish this +if [ "${WIN32}" -eq 1 ]; then + exit 0 +fi # --------------------------------------------------------------------------------------------------------------------- # cython (optional) @@ -313,24 +294,20 @@ fi # --------------------------------------------------------------------------------------------------------------------- # pyliblo -export EXTRA_CFLAGS="$(${PAWPAW_PREFIX}/bin/python3-config --cflags | awk 'sub("-ne","")')" -export EXTRA_CFLAGS+=" $(pkg-config --cflags liblo)" - -export EXTRA_LDFLAGS="-shared -L/home/falktx/PawPawBuilds/targets/win64/bin $(${PAWPAW_PREFIX}/bin/python3-config --ldflags | awk 'sub("-ne","")' | awk 'sub("/lib -lpython3.8","/lib -Wl,-Bdynamic -lpython3.8")')" -export EXTRA_LDFLAGS+=" -Wl,-Bstatic $(pkg-config --libs liblo)" +if [ "${WIN32}" -eq 1 ]; then + export EXTRA_CFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --cflags python3 liblo)" + export EXTRA_LDFLAGS="-shared $(${PAWPAW_PREFIX}/bin/pkg-config --libs python3 liblo)" + export LDSHARED="${TARGET_CXX}" +fi # export LINK="${TARGET_CXX}" # export LINKER="${TARGET_CXX}" -export LDSHARED="${TARGET_CXX}" - -# export PYTHONPATH="/home/falktx/PawPawBuilds/targets/win64/lib/python3.8" download pyliblo "${PYLIBLO_VERSION}" "http://das.nasophon.de/download" build_python pyliblo "${PYLIBLO_VERSION}" -# TODO: finish this if [ "${WIN32}" -eq 1 ]; then - exit 0 + unset LDSHARED fi # --------------------------------------------------------------------------------------------------------------------- diff --git a/bootstrap-qt.sh b/bootstrap-qt.sh index c7d51c9..9692c8d 100755 --- a/bootstrap-qt.sh +++ b/bootstrap-qt.sh @@ -76,7 +76,7 @@ function build_qt_conf() { export PKG_CONFIG="${TARGET_PKG_CONFIG}" export PKG_CONFIG_LIBDIR="${TARGET_PKG_CONFIG_PATH}" export PKG_CONFIG_PATH="${TARGET_PKG_CONFIG_PATH}" - export PKG_CONFIG_SYSROOT_DIR="${TARGET_PKG_CONFIG_PATH}" + export PKG_CONFIG_SYSROOT_DIR="/" if [ -d "${PAWPAW_ROOT}/patches/${name}" ]; then for p in $(ls "${PAWPAW_ROOT}/patches/${name}/" | grep "\.patch" | sort); do @@ -100,9 +100,6 @@ function build_qt_conf() { pushd "${pkgdir}" ./configure ${extraconfrules} touch .stamp_configured - #sed -i -e 's/sub-tests //' Makefile - #sed -i -e 's/sub-tests-all //' Makefile - #sed -i -e 's/sub-tests-qmake_all //' Makefile popd fi @@ -121,6 +118,9 @@ function build_qt_conf() { if [ ! -f "${pkgdir}/.stamp_installed" ]; then pushd "${pkgdir}" make ${MAKE_ARGS} -j 1 install + if [ "${WIN32}" -eq 1 ]; then + sed -i -e "s|d ||" ${PAWPAW_PREFIX}/lib/pkgconfig/Qt5*.pc + fi touch .stamp_installed popd fi diff --git a/patches/PyQt5_gpl/win32/01_cfg-env-vars.patch b/patches/PyQt5_gpl/win32/01_cfg-env-vars.patch index d38dfb9..2f99f45 100644 --- a/patches/PyQt5_gpl/win32/01_cfg-env-vars.patch +++ b/patches/PyQt5_gpl/win32/01_cfg-env-vars.patch @@ -2,35 +2,12 @@ diff --git a/configure.py b/configure.py index d893ae8..7d13747 100644 --- a/configure.py +++ b/configure.py -@@ -1558,7 +1558,7 @@ def generate_makefiles(target_config, verbose, parts, tracing, fatal_warnings, d - inf = open_for_writing('__init__.py') - inf.write(contents) - -- if target_config.py_platform == 'win32': -+ if target_config.py_platform == 'win32' or True: - # On Windows we try and make sure the Qt DLLs can be found, either any - # bundled copies or an existing installation (using the traditional - # Windows DLL search). We don't raise an exception in case the -@@ -2124,11 +2124,8 @@ def run_make(target_config, verbose, exe, makefile_name): - - # Guess the name of make and set the default target and platform specific - # name of the executable. -- if target_config.py_platform == 'win32': -- if target_config.qmake_spec == 'win32-g++': -- make = 'mingw32-make' -- else: -- make = 'nmake' -+ if target_config.py_platform == 'win32' or True: -+ make = 'make' - - if target_config.debug: - makefile_target = 'debug' @@ -2421,6 +2418,10 @@ def compile_test_program(target_config, verbose, mname, source=None, debug=None) pro_lines.append('TARGET = %s' % name) pro_lines.append('SOURCES = %s' % qmake_quote(name_source)) -+ pro_lines.append('QMAKE_CXXFLAGS += $$(CXXFLAGS)') + pro_lines.append('QMAKE_CFLAGS += $$(CFLAGS)') ++ pro_lines.append('QMAKE_CXXFLAGS += $$(CXXFLAGS)') + pro_lines.append('QMAKE_LFLAGS += $$(LDFLAGS)') + @@ -51,3 +28,17 @@ index d893ae8..7d13747 100644 if not os.access(out_file, os.F_OK): error("%s failed to create %s. Make sure your Qt installation is correct." % (test, out_file)) +@@ -2751,6 +2751,13 @@ def generate_module_makefile(target_config, verbose, mname, include_paths=None, + # qmake is run otherwise the install and uninstall targets are not + # generated. + shared = ''' ++CONFIG += link_pkgconfig ++PKGCONFIG += python3 ++ ++QMAKE_CFLAGS += $$(CFLAGS) ++QMAKE_CXXFLAGS += $$(CXXFLAGS) ++QMAKE_LFLAGS += $$(LDFLAGS) ++ + win32 { + PY_MODULE = %s%s.pyd + PY_MODULE_SRC = $(DESTDIR_TARGET) diff --git a/patches/PyQt5_gpl/win32/02_qmake-xspec.patch b/patches/PyQt5_gpl/win32/02_qmake-xspec.patch index 38bdde3..e1860e9 100644 --- a/patches/PyQt5_gpl/win32/02_qmake-xspec.patch +++ b/patches/PyQt5_gpl/win32/02_qmake-xspec.patch @@ -11,6 +11,15 @@ index 7d13747..a1cd0e9 100644 # On Windows for Qt versions prior to v5.9.0 we need to be explicit # about the qmake spec. +@@ -1558,7 +1558,7 @@ def generate_makefiles(target_config, verbose, parts, tracing, fatal_warnings, d + inf = open_for_writing('__init__.py') + inf.write(contents) + +- if target_config.py_platform == 'win32': ++ if target_config.py_platform == 'win32' or target_config.qmake_spec == 'win32-g++': + # On Windows we try and make sure the Qt DLLs can be found, either any + # bundled copies or an existing installation (using the traditional + # Windows DLL search). We don't raise an exception in case the @@ -1908,7 +1908,7 @@ def pro_sources(src_dir, other_headers=None, other_sources=None): def module_file_name(target_config, name): """ Return the name of a file implementing a module. """ @@ -20,6 +29,30 @@ index 7d13747..a1cd0e9 100644 fs = '{}.lib' if target_config.static else '{}.pyd' else: fs = 'lib{}.a' if target_config.static else '{}.so' +@@ -1930,6 +1930,9 @@ def generate_tool_wrapper(target_config, wrapper, module): + + exe = quote(target_config.pyuic_interpreter) + ++ if target_config.qmake_spec == 'win32-g++': ++ exe += ".exe" ++ + wf = open_for_writing(wrapper) + + if target_config.py_platform == 'win32': +@@ -2124,11 +2124,8 @@ def run_make(target_config, verbose, exe, makefile_name): + + # Guess the name of make and set the default target and platform specific + # name of the executable. +- if target_config.py_platform == 'win32': +- if target_config.qmake_spec == 'win32-g++': +- make = 'mingw32-make' +- else: +- make = 'nmake' ++ if True: # there should be a better way to do this.. ++ make = 'make' + + if target_config.debug: + makefile_target = 'debug' @@ -2514,7 +2514,7 @@ def get_sip_flags(target_config): sip_flags.append('-D') diff --git a/patches/sip/001-use-env-vars.patch b/patches/sip/001-use-env-vars.patch new file mode 100644 index 0000000..72f3b3c --- /dev/null +++ b/patches/sip/001-use-env-vars.patch @@ -0,0 +1,36 @@ +diff --git a/siputils.py b/siputils.py +index e0efcf5..5da51f8 100644 +--- a/siputils.py ++++ b/siputils.py +@@ -1162,9 +1162,9 @@ class Makefile: + if self._deployment_target: + mfile.write("export MACOSX_DEPLOYMENT_TARGET = %s\n" % self._deployment_target) + +- mfile.write("CC = %s\n" % self.required_string("CC")) +- mfile.write("CXX = %s\n" % self.required_string("CXX")) +- mfile.write("LINK = %s\n" % self.required_string("LINK")) ++ mfile.write("CC ?= %s\n" % self.required_string("CC")) ++ mfile.write("CXX ?= %s\n" % self.required_string("CXX")) ++ mfile.write("LINK ?= %s\n" % self.required_string("LINK")) + + cppflags = [] + +@@ -1194,13 +1194,13 @@ class Makefile: + + libs.extend(self.optional_list("LIBS")) + +- mfile.write("CPPFLAGS = %s\n" % ' '.join(cppflags)) ++ mfile.write("CPPFLAGS += %s\n" % ' '.join(cppflags)) + +- mfile.write("CFLAGS = %s\n" % self.optional_string("CFLAGS")) +- mfile.write("CXXFLAGS = %s\n" % self.optional_string("CXXFLAGS")) +- mfile.write("LFLAGS = %s\n" % self.optional_string("LFLAGS")) ++ mfile.write("CFLAGS += %s\n" % self.optional_string("CFLAGS")) ++ mfile.write("CXXFLAGS += %s\n" % self.optional_string("CXXFLAGS")) ++ mfile.write("LFLAGS += %s\n" % self.optional_string("LFLAGS")) + +- mfile.write("LIBS = %s\n" % ' '.join(libs)) ++ mfile.write("LIBS += %s\n" % ' '.join(libs)) + + if self._qt: + mfile.write("MOC = %s\n" % _quote(self.required_string("MOC"))) diff --git a/patches/sip/002-module-extension.patch b/patches/sip/002-module-extension.patch new file mode 100644 index 0000000..5dfbcc3 --- /dev/null +++ b/patches/sip/002-module-extension.patch @@ -0,0 +1,13 @@ +diff --git a/configure.py b/configure.py +index 6cea574..b7e4ba3 100644 +--- a/configure.py ++++ b/configure.py +@@ -464,7 +464,7 @@ def create_makefiles(macros): + all_installs.extend(module_installs) + + if not opts.no_module: +- if sys.platform == 'win32': ++ if sys.platform == 'win32' or opts.platform == 'win32-g++': + mod = 'sip.lib' if opts.static else 'sip.pyd' + else: + mod = 'libsip.a' if opts.static else 'sip.so' diff --git a/patches/sip/win32/0001-mingw-python.patch b/patches/sip/win32/0001-mingw-python.patch index 57f3638..b75527c 100644 --- a/patches/sip/win32/0001-mingw-python.patch +++ b/patches/sip/win32/0001-mingw-python.patch @@ -85,7 +85,7 @@ diff -uNr sip-4.16.2/siputils.py sip-4.16.2-mingw/siputils.py # Get these once and make them available to sub-classes. - if sys.platform == "win32": -+ if False: ++ if sys.platform == "win32" and not "MSYSTEM" in os.environ: def_copy = "copy" def_rm = "del" def_mkdir = "mkdir" diff --git a/patches/sip/win32/9001-pawpaw-needed-changes.patch b/patches/sip/win32/9001-pawpaw-needed-changes.patch new file mode 100644 index 0000000..9538755 --- /dev/null +++ b/patches/sip/win32/9001-pawpaw-needed-changes.patch @@ -0,0 +1,13 @@ +diff --git a/siputils.py b/siputils.py +index 457e417..050b130 100644 +--- a/siputils.py ++++ b/siputils.py +@@ -951,7 +951,7 @@ class Makefile: + elif sys.platform == "darwin" and framework: + plib = "-framework " + clib + else: +- plib = "-l" + clib ++ plib = "-Wl,-Bdynamic -l" + clib + " -Wl,-Bstatic" + + return plib +