git-svn-id: svn://db.shs.com.ru/pip@1011 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2020-04-12 08:50:03 +00:00
parent baac83027d
commit b5f24b656e
2 changed files with 169 additions and 110 deletions

View File

@@ -336,6 +336,8 @@ END
endmacro() endmacro()
# Help macros begin
macro(__add_file_or_dir _DIR_VAR _FILE_VAR _PATH _RELPATH) macro(__add_file_or_dir _DIR_VAR _FILE_VAR _PATH _RELPATH)
set(_p) set(_p)
if (IS_ABSOLUTE "${_PATH}") if (IS_ABSOLUTE "${_PATH}")
@@ -352,6 +354,64 @@ macro(__add_file_or_dir _DIR_VAR _FILE_VAR _PATH _RELPATH)
endif() endif()
endmacro() endmacro()
set(__win_host 0)
if ("x${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "xWindows")
set(__win_host 1)
endif()
macro(__make_win_path _in_path _out_var _is_dir _out_dir)
set(_add "")
if (${_is_dir})
set(_add "/")
endif()
file(TO_NATIVE_PATH "${_in_path}" ${_out_var})
string(REPLACE "//" "/" ${_out_var} "${${_out_var}}${_add}")
if (NOT "x${_out_dir}" STREQUAL "x")
string(LENGTH "${${_out_var}}" __sl)
math(EXPR __sl ${__sl}-1)
string(SUBSTRING "${${_out_var}}" 0 ${__sl} __substr)
get_filename_component(${_out_dir} "${__substr}" NAME)
#message("dirname src=\"${${_out_var}}\", len=${__sl} \"${__substr}\" = \"${${_out_dir}}\"")
endif()
string(REPLACE "/" "\\" ${_out_var} "${${_out_var}}")
endmacro()
macro(__make_dir _cmd _dest)
if (__win_host)
__make_win_path("${_dest}" __d 1 "")
set(${_cmd} ${${_cmd}} COMMAND if not exist "\"${__d}\"" mkdir "\"${__d}\"")
else()
set(${_cmd} ${${_cmd}} COMMAND mkdir ${_VERB} -p "${_dest}")
endif()
endmacro()
macro(__make_copy _cmd _dirs _files _dest)
if (${_dirs} OR ${_files})
__make_dir(${_cmd} "${_dest}")
endif()
if (__win_host)
__make_win_path("${_dest}" _wdest 1 "")
foreach(_d ${${_dirs}})
__make_win_path("${_d}" _wsrc 1 _dirname)
__make_dir(${_cmd} "${_dest}/${_dirname}")
set(${_cmd} ${${_cmd}} COMMAND xcopy /y /r /e "${_wsrc}*" "\"${_wdest}${_dirname}\\\"" ${_WVERB})
endforeach()
foreach(_f ${${_files}})
__make_win_path("${_f}" _wsrc 0 "")
set(${_cmd} ${${_cmd}} COMMAND xcopy /y /r "\"${_wsrc}\"" "\"${_wdest}\"" ${_WVERB})
endforeach()
else()
foreach(_d ${${_dirs}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -rf "${_d}" "${_dest}/")
endforeach()
foreach(_f ${${_files}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -f "${_f}" "${_dest}/")
endforeach()
endif()
endmacro()
# Help macros end
macro(deploy_target _T) macro(deploy_target _T)
set(_DESTINATION "${CMAKE_INSTALL_PREFIX}") set(_DESTINATION "${CMAKE_INSTALL_PREFIX}")
@@ -414,7 +474,7 @@ macro(deploy_target _T)
endif() endif()
endforeach() endforeach()
#message("app depend libpath ${_DEP_LIBPATH}") #message("app depend libpath ${_DEP_LIBPATH}")
set(_CMD_COPY) set(_CMD_)
set(_has_deploy 0) set(_has_deploy 0)
if ("x${CMAKE_SYSTEM_NAME}" STREQUAL "xLinux") if ("x${CMAKE_SYSTEM_NAME}" STREQUAL "xLinux")
if (NOT CMAKE_LDD) if (NOT CMAKE_LDD)
@@ -444,25 +504,14 @@ macro(deploy_target _T)
set(_C_echo ">>" "${_AGD}/DEBIAN/control") set(_C_echo ">>" "${_AGD}/DEBIAN/control")
set(_D_echof ">" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop") set(_D_echof ">" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop")
set(_D_echo ">>" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop") set(_D_echo ">>" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop")
macro(__make_copy _cmd _dirs _files _dest) __make_copy(_CMD_ _RES_DIRS _RES_FILES "${_AGD}/usr/share/${${_T}_COMPANY}/${_T}")
if (${_dirs} OR ${_files}) __make_copy(_CMD_ _PLUG_DIRS _PLUG_FILES "${_AGD}/usr/lib/${${_T}_COMPANY}/${_T}")
set(${_cmd} ${${_cmd}} COMMAND mkdir ${_VERB} -p "${_dest}") __make_copy(_CMD_ _FILE_DIRS _FILE_FILES "${_AGD}/usr/bin")
endif()
foreach(_d ${${_dirs}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -rf "${_d}" "${_dest}/")
endforeach()
foreach(_f ${${_files}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -f "${_f}" "${_dest}/")
endforeach()
endmacro()
__make_copy(_CMD_COPY _RES_DIRS _RES_FILES "${_AGD}/usr/share/${${_T}_COMPANY}/${_T}")
__make_copy(_CMD_COPY _PLUG_DIRS _PLUG_FILES "${_AGD}/usr/lib/${${_T}_COMPANY}/${_T}")
__make_copy(_CMD_COPY _FILE_DIRS _FILE_FILES "${_AGD}/usr/bin")
if (_DEP_LIBS) if (_DEP_LIBS)
set(_CMD_COPY ${_CMD_COPY} COMMAND cp ${_VERB} -f ${_DEP_LIBS} ${_AGD}/usr/lib) set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f ${_DEP_LIBS} ${_AGD}/usr/lib)
endif() endif()
if (_ICON_NAME) if (_ICON_NAME)
set(_CMD_COPY ${_CMD_COPY} COMMAND cp ${_VERB} -f ${_ICON_FN} ${_AGD}/usr/share/pixmaps) set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f ${_ICON_FN} ${_AGD}/usr/share/pixmaps)
endif() endif()
add_custom_target(deploy_${_T} add_custom_target(deploy_${_T}
# gather deb dir # gather deb dir
@@ -472,7 +521,7 @@ macro(deploy_target _T)
COMMAND mkdir ${_VERB} -p ${_AGD}/usr/share/pixmaps COMMAND mkdir ${_VERB} -p ${_AGD}/usr/share/pixmaps
COMMAND mkdir ${_VERB} -p ${_AGD}/usr/share/applications COMMAND mkdir ${_VERB} -p ${_AGD}/usr/share/applications
COMMAND cp ${_VERB} -f ${_DEPLOY_DIR}/${_T} ${_AGD}/usr/bin COMMAND cp ${_VERB} -f ${_DEPLOY_DIR}/${_T} ${_AGD}/usr/bin
${_CMD_COPY} ${_CMD_}
COMMAND echo "Package: ${_DEBNAME}" ${_C_echof} COMMAND echo "Package: ${_DEBNAME}" ${_C_echof}
COMMAND echo "Version: ${_DEBVERSION}" ${_C_echo} COMMAND echo "Version: ${_DEBVERSION}" ${_C_echo}
@@ -512,72 +561,20 @@ macro(deploy_target _T)
find_program(CMAKE_OBJDUMP objdump) find_program(CMAKE_OBJDUMP objdump)
endif() endif()
set(_AGD "${_DEPLOY_DIR}/${_TV}_win_${MY_ARCH}/") set(_AGD "${_DEPLOY_DIR}/${_TV}_win_${MY_ARCH}/")
set(_win_host 0) if (__win_host)
if ("x${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "xWindows")
set(_win_host 1)
endif()
macro(__make_win_path _in_path _out_var _is_dir _out_dir)
set(_add "")
if (${_is_dir})
set(_add "/")
endif()
file(TO_NATIVE_PATH "${_in_path}" ${_out_var})
string(REPLACE "//" "/" ${_out_var} "${${_out_var}}${_add}")
if (NOT "x${_out_dir}" STREQUAL "x")
string(LENGTH "${${_out_var}}" __sl)
math(EXPR __sl ${__sl}-1)
string(SUBSTRING "${${_out_var}}" 0 ${__sl} __substr)
get_filename_component(${_out_dir} "${__substr}" NAME)
#message("dirname src=\"${${_out_var}}\", len=${__sl} \"${__substr}\" = \"${${_out_dir}}\"")
endif()
string(REPLACE "/" "\\" ${_out_var} "${${_out_var}}")
endmacro()
macro(__make_dir _cmd _dest)
if (_win_host)
__make_win_path("${_dest}" __d 1 "")
set(${_cmd} ${${_cmd}} COMMAND if not exist "\"${__d}\"" mkdir "\"${__d}\"")
else()
set(${_cmd} ${${_cmd}} COMMAND mkdir ${_VERB} -p "${_dest}")
endif()
endmacro()
macro(__make_copy _cmd _dirs _files _dest)
if (${_dirs} OR ${_files})
__make_dir(${_cmd} "${_dest}")
endif()
if (_win_host)
__make_win_path("${_dest}" _wdest 1 "")
foreach(_d ${${_dirs}})
__make_win_path("${_d}" _wsrc 1 _dirname)
__make_dir(${_cmd} "${_dest}/${_dirname}")
set(${_cmd} ${${_cmd}} COMMAND xcopy /y /r "${_wsrc}*" "\"${_wdest}${_dirname}\\\"" ${_WVERB})
endforeach()
foreach(_f ${${_files}})
__make_win_path("${_f}" _wsrc 0 "")
set(${_cmd} ${${_cmd}} COMMAND xcopy /y /r "\"${_wsrc}\"" "\"${_wdest}\"" ${_WVERB})
endforeach()
else()
foreach(_d ${${_dirs}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -rf "${_d}" "${_dest}/")
endforeach()
foreach(_f ${${_files}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -f "${_f}" "${_dest}/")
endforeach()
endif()
endmacro()
if (_win_host)
string(REPLACE "/" "\\" CMAKE_OBJDUMP "${CMAKE_OBJDUMP}") string(REPLACE "/" "\\" CMAKE_OBJDUMP "${CMAKE_OBJDUMP}")
endif() endif()
set(_var_exe "${_DEPLOY_DIR}/${_T}.exe") set(_var_exe "${_DEPLOY_DIR}/${_T}.exe")
set(_var_empty) set(_var_empty)
__make_dir(_CMD_COPY "${_AGD}") __make_dir(_CMD_ "${_AGD}")
__make_dir(_CMD_COPY "${_DESTINATION}") __make_dir(_CMD_ "${_DESTINATION}")
__make_copy(_CMD_COPY _var_empty _var_exe "${_AGD}") __make_copy(_CMD_ _var_empty _var_exe "${_AGD}")
__make_copy(_CMD_COPY _RES_DIRS _RES_FILES "${_AGD}") __make_copy(_CMD_ _RES_DIRS _RES_FILES "${_AGD}")
__make_copy(_CMD_COPY _PLUG_DIRS _PLUG_FILES "${_AGD}") __make_copy(_CMD_ _PLUG_DIRS _PLUG_FILES "${_AGD}")
__make_copy(_CMD_COPY _FILE_DIRS _FILE_FILES "${_AGD}") __make_copy(_CMD_ _FILE_DIRS _FILE_FILES "${_AGD}")
add_custom_target(deploy_${_T} add_custom_target(deploy_${_T}
# gather dir # gather dir
${_CMD_COPY} ${_CMD_}
COMMAND deploy_tool ${_VERB} ${_OPTIONS} -W "\"${CMAKE_OBJDUMP}\"" -P windows,minimal -S windows -q "\"${Qt5_ROOT}\"" -s "\"${CMAKE_PREFIX_PATH}/bin;${MINGW_BIN};${DEPLOY_ADD_LIBPATH}${_DEP_LIBPATH}\"" -o ${_AGD} -p ${_AGD} "\"${_AGD}${_T}.exe\"" ${_ADD_DEPS} COMMAND deploy_tool ${_VERB} ${_OPTIONS} -W "\"${CMAKE_OBJDUMP}\"" -P windows,minimal -S windows -q "\"${Qt5_ROOT}\"" -s "\"${CMAKE_PREFIX_PATH}/bin;${MINGW_BIN};${DEPLOY_ADD_LIBPATH}${_DEP_LIBPATH}\"" -o ${_AGD} -p ${_AGD} "\"${_AGD}${_T}.exe\"" ${_ADD_DEPS}
# zip # zip
@@ -599,29 +596,18 @@ macro(deploy_target _T)
set_target_properties(${_T} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_ROOT}/Modules/PIMacOSBundle.plist.in") set_target_properties(${_T} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_ROOT}/Modules/PIMacOSBundle.plist.in")
set(_AGD "${_DEPLOY_DIR}/${_T}.app") set(_AGD "${_DEPLOY_DIR}/${_T}.app")
set(_DMG "${CMAKE_CURRENT_BINARY_DIR}/dmg") set(_DMG "${CMAKE_CURRENT_BINARY_DIR}/dmg")
macro(__make_copy _cmd _dirs _files _dest) __make_copy(_CMD_ _RES_DIRS _RES_FILES "${_AGD}/Contents/Resources")
if (${_dirs} OR ${_files}) __make_copy(_CMD_ _PLUG_DIRS _PLUG_FILES "${_AGD}/Contents/PlugIns")
set(${_cmd} ${${_cmd}} COMMAND mkdir ${_VERB} -p "${_dest}") __make_copy(_CMD_ _FILE_DIRS _FILE_FILES "${_AGD}/Contents/MacOS")
endif()
foreach(_d ${${_dirs}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -rf "${_d}" "${_dest}/")
endforeach()
foreach(_f ${${_files}})
set(${_cmd} ${${_cmd}} COMMAND cp ${_VERB} -f "${_f}" "${_dest}/")
endforeach()
endmacro()
__make_copy(_CMD_COPY _RES_DIRS _RES_FILES "${_AGD}/Contents/Resources")
__make_copy(_CMD_COPY _PLUG_DIRS _PLUG_FILES "${_AGD}/Contents/PlugIns")
__make_copy(_CMD_COPY _FILE_DIRS _FILE_FILES "${_AGD}/Contents/MacOS")
if (_ICON_NAME) if (_ICON_NAME)
set(_CMD_COPY ${_CMD_COPY} COMMAND cp ${_VERB} -f ${_ICON_FN} ${_AGD}/Contents/Resources) set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f ${_ICON_FN} ${_AGD}/Contents/Resources)
endif() endif()
add_custom_target(deploy_${_T} add_custom_target(deploy_${_T}
# gather .app dir # gather .app dir
COMMAND mkdir ${_VERB} -p ${_AGD}/Contents/Resources COMMAND mkdir ${_VERB} -p ${_AGD}/Contents/Resources
COMMAND mkdir ${_VERB} -p ${_AGD}/Contents/Frameworks COMMAND mkdir ${_VERB} -p ${_AGD}/Contents/Frameworks
COMMAND mkdir ${_VERB} -p ${_DESTINATION} COMMAND mkdir ${_VERB} -p ${_DESTINATION}
${_CMD_COPY} ${_CMD_}
#COMMAND cp ${_ICON_FN} ${_AGD}/Contents/Resources #COMMAND cp ${_ICON_FN} ${_AGD}/Contents/Resources
#COMMAND cp -r ${_DEPLOY_DIR}/lang ${_AGD}/Contents/Resources #COMMAND cp -r ${_DEPLOY_DIR}/lang ${_AGD}/Contents/Resources
COMMAND deploy_tool ${_VERB} ${_OPTIONS} -M "${CMAKE_OTOOL}" -P cocoa,minimal -S mac -q ${Qt5_ROOT} -s "\"${CMAKE_PREFIX_PATH}/lib;${DEPLOY_ADD_LIBPATH}${_DEP_LIBPATH}\"" -o ${_AGD}/Contents/Frameworks -p ${_AGD}/Contents/PlugIns ${_AGD}/Contents/MacOS/${_T} ${_ADD_DEPS} COMMAND deploy_tool ${_VERB} ${_OPTIONS} -M "${CMAKE_OTOOL}" -P cocoa,minimal -S mac -q ${Qt5_ROOT} -s "\"${CMAKE_PREFIX_PATH}/lib;${DEPLOY_ADD_LIBPATH}${_DEP_LIBPATH}\"" -o ${_AGD}/Contents/Frameworks -p ${_AGD}/Contents/PlugIns ${_AGD}/Contents/MacOS/${_T} ${_ADD_DEPS}
@@ -636,20 +622,77 @@ macro(deploy_target _T)
) )
set(_has_deploy 1) set(_has_deploy 1)
elseif (DEFINED ANDROID_PLATFORM) elseif (DEFINED ANDROID_PLATFORM)
set(_AT ${_T}) set(_AT ${_T}_lib)
get_target_property(_TT ${_T} TYPE) set(_ATA ${_AT}_${ANDROID_ABI})
if (NOT "x${_TT}" STREQUAL "xSHARED_LIBRARY") get_target_property(_sources ${_T} SOURCES)
set(_AT ${_T}_lib) get_target_property(_libs ${_T} LINK_LIBRARIES)
get_target_property(_sources ${_T} SOURCES) get_target_property(_incs ${_T} INCLUDE_DIRECTORIES)
get_target_property(_libs ${_T} LINK_LIBRARIES) add_library(${_ATA} SHARED ${_sources})
get_target_property(_incs ${_T} INCLUDE_DIRECTORIES) target_link_libraries(${_ATA} ${_libs})
add_library(${_AT} SHARED ${_sources}) target_include_directories(${_ATA} PRIVATE ${_incs})
target_link_libraries(${_AT} ${_libs}) set_target_properties(${_T} PROPERTIES EXCLUDE_FROM_ALL 1)
target_include_directories(${_AT} PRIVATE ${_incs}) #message("create new target ${_ATA} ${_sources} ${_libs}")
message("create new target ${_AT} ${_sources} ${_libs}") set(_AGD "${_DEPLOY_DIR}/${_T}.android")
endif() set(_file)
__make_dir(_CMD_ "${_AGD}")
set(_dir "${CMAKE_BINARY_DIR}/android-build/libs")
__make_copy(_CMD_ _dir _file "${_AGD}")
set(_dir "${CMAKE_CURRENT_SOURCE_DIR}/android/res")
__make_copy(_CMD_ _dir _file "${_AGD}")
set(_dir "${CMAKE_CURRENT_SOURCE_DIR}/android/src")
__make_copy(_CMD_ _dir _file "${_AGD}")
set(_dir)
set(_file "${Qt5_ROOT}/src/android/templates/res/values/libs.xml")
__make_copy(_CMD_ _dir _file "${_AGD}/res/values")
__make_copy(_CMD_ _RES_DIRS _RES_FILES "${_AGD}/res")
#__make_copy(_CMD_ _PLUG_DIRS _PLUG_FILES "${_AGD}/")
#__make_copy(_CMD_ _FILE_DIRS _FILE_FILES "${_AGD}/Contents/MacOS")
message("bindir = ${CMAKE_CURRENT_SOURCE_DIR}")
#get_target_property(_LL ${_T} ) #get_target_property(_LL ${_T} )
add_custom_target(deploy_${_T}) set(__archs "armeabi-v7a" "arm64-v8a" "x86" "x86_64")
set(QT_ANDROID_ARCHITECTURES)
find_library(_lib_ c++_shared)
foreach (_a ${__archs})
set(_aname "${_a}")
if ("${_a}" STREQUAL "armeabi-v7a")
set(_aname "arm")
elseif ("${_a}" STREQUAL "arm64-v8a")
set(_aname "arm64")
endif()
set(_exist 0)
if ("${_a}" STREQUAL "${ANDROID_ABI}")
set(_exist 1)
elseif (EXISTS "${CMAKE_BINARY_DIR}/android-build/libs/${_a}")
set(_exist 1)
endif()
if (_exist)
string(REPLACE "${ANDROID_ABI}" "${_a}" _a_prefix "${CMAKE_PREFIX_PATH}")
string(REPLACE "arch-${ANDROID_ARCH_NAME}" "arch-${_aname}" _a_prefix "${_a_prefix}")
list(APPEND QT_ANDROID_ARCHITECTURES " \"${_a}\" : \"${ANDROID_SYSROOT_${_a}}\"")
string(REPLACE "${ANDROID_SYSROOT_${ANDROID_ABI}}" "${ANDROID_SYSROOT_${_a}}" _lib_${_a} "${_lib_}")
#message("search = ${_a_prefix}/lib")
__make_copy(_CMD_ _empty _lib_${_a} "${_AGD}/libs/${_a}")
set(_CMD_ ${_CMD_} COMMAND deploy_tool ${_VERB} ${_OPTIONS} -L "\"${CMAKE_READELF}\"" -s "\"${_a_prefix}/lib\"" -o "\"${_AGD}/libs/${_a}\"" --ignore "\"c:m:dl\"" "\"${_AGD}/libs/${_a}/lib${_AT}_${_a}.so\"" ${_ADD_DEPS})
#message("c++_${_a} -> ${_lib_${_a}}")
endif()
endforeach()
string(REPLACE ";" ",\n" QT_ANDROID_ARCHITECTURES "${QT_ANDROID_ARCHITECTURES}")
set(QT_ANDROID_APPLICATION_BINARY ${_AT})
set(ANDROID_LABEL "${${_T}_LABEL}")
set(ANDROID_ICON "${${_T}_ICON}")
set(ANDROID_VERSION "${${_T}_VERSION}")
set(ANDROID_BUILD "${${_T}_VERSION_BUILD}")
set(ANDROID_PACKAGE "${${_T}_FULLNAME}")
set(QT_DIR ${Qt5_ROOT})
set(_out_json "${CMAKE_CURRENT_BINARY_DIR}/${_T}_android_deployment_settings.json")
configure_file("${CMAKE_BINARY_DIR}/android_deployment_settings.json.in" "${_out_json}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/android/AndroidManifest.xml.in" "${_AGD}/AndroidManifest.xml")
set(_CMD_ ${_CMD_} COMMAND "${Qt5_BIN}/androiddeployqt" --aux-mode --android-platform ${ANDROID_PLATFORM} --output "\"${_AGD}\"" --input "\"${_out_json}\"")
add_custom_target(deploy_${_T}
# gather .app dir
${_CMD_}
COMMENT "Generating ${_TV}.apk/aab"
)
set(_has_deploy 1) set(_has_deploy 1)
endif() endif()
if (_has_deploy) if (_has_deploy)

View File

@@ -43,8 +43,8 @@ void usage() {
piCout << "\"*=\" disable optional plugins."; piCout << "\"*=\" disable optional plugins.";
piCout << ""; piCout << "";
piCout << Green << Bold << "Usage:" << Default << "\"deploy_tool [-hvfC] [--dependencies [--prefix <text>]] " piCout << Green << Bold << "Usage:" << Default << "\"deploy_tool [-hvfC] [--dependencies [--prefix <text>]] "
"[-p <qt_plugins>] [-s <search_path>] [-S <styles>] [-l <ldd>] " "[-p <qt_plugins>] [-s <search_path>] [--ignore <libs>] [-S <styles>] "
"[-D <dpkg>] [-L <readelf> | -W <objdump> | -M <otool>] " "[-l <ldd>] [-D <dpkg>] [-L <readelf> | -W <objdump> | -M <otool>] "
"[-d <depth>] [-q <qtdir>] [-a <add_libs>] [-S <styles>] " "[-d <depth>] [-q <qtdir>] [-a <add_libs>] [-S <styles>] "
"[-P <platforms>] [--qt-plugins <d>] -o <out_path> <file> [<file2> ...]\"" << NewLine; "[-P <platforms>] [--qt-plugins <d>] -o <out_path> <file> [<file2> ...]\"" << NewLine;
piCout << Green << Bold << "Details:"; piCout << Green << Bold << "Details:";
@@ -55,6 +55,7 @@ void usage() {
piCout << Bold << "Processing control"; piCout << Bold << "Processing control";
piCout << "-f, --fake " << Green << "- don`t copy, only print"; piCout << "-f, --fake " << Green << "- don`t copy, only print";
piCout << "-s <search_path> " << Green << "- set search pathes for system libraries, may be separated by \";\", default \"/usr/lib\""; piCout << "-s <search_path> " << Green << "- set search pathes for system libraries, may be separated by \";\", default \"/usr/lib\"";
piCout << "--ignore <libs> " << Green << "- ignore libraries names, may be separated by \":\", default \"\"";
piCout << "-l <ldd> " << Green << "- \"ldd\" path, default \"/usr/bin/ldd\""; piCout << "-l <ldd> " << Green << "- \"ldd\" path, default \"/usr/bin/ldd\"";
piCout << "-L <readelf> " << Green << "- \"readelf\" path, overrides \"ldd\""; piCout << "-L <readelf> " << Green << "- \"readelf\" path, overrides \"ldd\"";
piCout << "-W <objdump> " << Green << "- \"objdump\" path, overrides \"ldd\""; piCout << "-W <objdump> " << Green << "- \"objdump\" path, overrides \"ldd\"";
@@ -107,7 +108,7 @@ int depth = 5;
bool fake = false, is_ldd = true, is_deps = false, need_qt = false; bool fake = false, is_ldd = true, is_deps = false, need_qt = false;
PIString ldd, readelf, objdump, otool, dpkg, out_dir, qt_dir, out_plugins_dir; PIString ldd, readelf, objdump, otool, dpkg, out_dir, qt_dir, out_plugins_dir;
PIStringList styles, lib_dirs, add_libs, platforms, sqldrivers; PIStringList styles, lib_dirs, add_libs, platforms, sqldrivers;
PISet<PIString> all_libs, miss_libs, all_deps, frameworks, miss_frameworks, qt_plugins; PISet<PIString> all_libs, miss_libs, all_deps, frameworks, miss_frameworks, qt_plugins, ignore_libs;
PIMap<PIString, PIStringList> qt_filters; PIMap<PIString, PIStringList> qt_filters;
@@ -247,6 +248,12 @@ void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) {
if (all_libs[l]) continue; if (all_libs[l]) continue;
PIFile::FileInfo fi; PIFile::FileInfo fi;
fi.path = l; fi.path = l;
PIString lname = fi.baseName();
if (lname.startsWith("lib")) lname.cutLeft(3);
//piCout << "check ignore" << lname << ignore_libs;
if (ignore_libs.contains(lname)) {
continue;
}
checkQtLib(fi.name().toLowerCase()); checkQtLib(fi.name().toLowerCase());
cur_libs << l; cur_libs << l;
all_libs << l; all_libs << l;
@@ -354,6 +361,7 @@ int main(int argc, char * argv[]) {
cli.addArgument("output", true); cli.addArgument("output", true);
cli.addArgument("pqt_out_plugins", true); cli.addArgument("pqt_out_plugins", true);
cli.addArgument("search_path", true); cli.addArgument("search_path", true);
cli.addArgument("ignore", PIChar('\0'), true);
cli.addArgument("Styles", true); cli.addArgument("Styles", true);
cli.addArgument("Platforms", true); cli.addArgument("Platforms", true);
cli.addArgument("qt-plugins", PIChar('\0'), true); cli.addArgument("qt-plugins", PIChar('\0'), true);
@@ -377,12 +385,19 @@ int main(int argc, char * argv[]) {
out_dir = cli.argumentValue("output"); out_dir = cli.argumentValue("output");
lib_dirs = cli.argumentValue("search_path").split(";"); lib_dirs = cli.argumentValue("search_path").split(";");
add_libs = cli.argumentValue("add_libs").split(";"); add_libs = cli.argumentValue("add_libs").split(";");
ignore_libs = cli.argumentValue("ignore").split(":");
qt_dir = cli.argumentValue("qtdir"); qt_dir = cli.argumentValue("qtdir");
ldd = cli.argumentValue("ldd"); ldd = cli.argumentValue("ldd");
readelf = cli.argumentValue("Lreadelf"); readelf = cli.argumentValue("Lreadelf");
objdump = cli.argumentValue("Wobjdump"); objdump = cli.argumentValue("Wobjdump");
otool = cli.argumentValue("Motool"); otool = cli.argumentValue("Motool");
dpkg = cli.argumentValue("Dpkg"); dpkg = cli.argumentValue("Dpkg");
#ifdef WINDOWS
readelf.replaceAll("/", "\\");
objdump.replaceAll("/", "\\");
otool.replaceAll("/", "\\");
dpkg.replaceAll("/", "\\");
#endif
if (dpkg.isEmpty()) if (dpkg.isEmpty())
dpkg = "/usr/bin/dpkg"; dpkg = "/usr/bin/dpkg";
out_plugins_dir = out_dir; out_plugins_dir = out_dir;
@@ -407,6 +422,7 @@ int main(int argc, char * argv[]) {
lib_dirs << (qbin + "bin"); lib_dirs << (qbin + "bin");
} }
piForeach (PIString & s, lib_dirs) { piForeach (PIString & s, lib_dirs) {
s.trim();
if (!s.endsWith("/")) s += "/"; if (!s.endsWith("/")) s += "/";
} }
if (out_dir.isEmpty()) out_dir = "."; if (out_dir.isEmpty()) out_dir = ".";