cisco-open-source / qtwebdriver

WebDriver implementation for Qt
https://github.com/cisco-open-source/qtwebdriver/wiki
197 stars 59 forks source link

I could't build on windows 10 #72

Open ozerkon opened 3 years ago

ozerkon commented 3 years ago

Hi, Following the instructions here I wanted to install the qtwebdriver but failed.

ozer@Lenovo MINGW64 /
$ git clone https://chromium.googlesource.com/external/gyp
Cloning into 'gyp'...
remote: Total 18491 (delta 11523), reused 18491 (delta 11523)
Receiving objects: 100% (18491/18491), 12.00 MiB | 1.10 MiB/s, done.
Resolving deltas: 100% (11523/11523), done.

ozer@Lenovo MINGW64 /
$ git clone https://github.com/cisco-open-source/qtwebdriver
Cloning into 'qtwebdriver'...
remote: Enumerating objects: 15448, done.
remote: Total 15448 (delta 0), reused 0 (delta 0), pack-reused 15448
Receiving objects: 100% (15448/15448), 144.16 MiB | 1016.00 KiB/s, done.
Resolving deltas: 100% (8949/8949), done.

ozer@Lenovo MINGW64 /
$ cd qtwebdriver

ozer@Lenovo MINGW64 /qtwebdriver (WD_1.X_dev)
$ cp qt5_sample_config.gypi wd.gypi

ozer@Lenovo MINGW64 /qtwebdriver (WD_1.X_dev)
$ cat wd.gypi
{
  'variables': {
    'QT5': '1',
    'WD_CONFIG_QWIDGET_BASE': '1',
# If Qt >= 5.6 set 'WD_CONFIG_WEBKIT' : '0'
    'WD_CONFIG_WEBKIT': '1',
    'WD_CONFIG_QUICK': '1',
    'WD_CONFIG_PLAYER': '0',
    'WD_CONFIG_ONE_KEYRELEASE': '0',
    'QT_INC_PATH': 'C:\Qt\5.15.2\mingw81_64\include',
    'QT_BIN_PATH': 'C:\Qt\5.15.2\mingw81_64\bin',
    'QT_LIB_PATH': 'C:\Qt\5.15.2\mingw81_64\lib'
  },
}

ozer@Lenovo MINGW64 /qtwebdriver (WD_1.X_dev)
$ ./build.sh ./out
Traceback (most recent call last):
  File "C:\Program Files\Git\qtwebdriver\generate_wdversion.py", line 14, in <module>
    versionfile.write("extern const char kLastChanges[] = \"" + data.strip() + "\";\n")
TypeError: can only concatenate str (not "bytes") to str
./build.sh: line 51: make: command not found

Here is the "C:\Program Files\Git\qtwebdriver\generate_wdversion.py" file


import subprocess as sp

filename = "./src/webdriver/webdriver_version.cc"
p = sp.Popen(["git", "describe" , "--abbrev=10", "--dirty", "--always"], stdin=sp.PIPE, stdout=sp.PIPE)

data = p.stdout.readline()

versionfile = open (filename, 'w')
versionfile.write("namespace webdriver {\n")
versionfile.write("extern const char kProductName[] = \"WebDriver-cisco-cmt\";\n")
versionfile.write("extern const char kVersionNumber[] = \"1.3.3\";\n")
versionfile.write("extern const char kBuildTime[] = __TIME__;\n")
versionfile.write("extern const char kBuildDate[] = __DATE__;\n")
versionfile.write("extern const char kLastChanges[] = \"" + data.strip() + "\";\n")
versionfile.write("}")
versionfile.close()

p.stdout.close()
p.stdin.close()

And here is the "C:\Program Files\Git\qtwebdriver\build.sh" file:

#!/usr/bin/env bash
output_gen=$1
platform=$2
mode=$3
qt_dir=$4

root_dir=`pwd`
if [ -z $output_gen ];
then
  output_gen=`pwd`/out
  platform="desktop"
fi

output_gen=`readlink -m ${output_gen}`
base_output_gen=`dirname ${output_gen}`

if [ -z $platform ];
then
  platforms="desktop"
else
  platforms=$platform
fi
if [ -z $mode ];
then
  modes="release"
else
  modes=$mode
fi

OUT_STATIC_LIB_FILES="libchromium_base.a libWebDriver_core.a libWebDriver_extension_qt_base.a libWebDriver_extension_qt_web.a libWebDriver_extension_qt_quick.a libWebDriver_extension_qt_quick_web.a"
OUT_SHARED_LIB_FILES="libchromium_base.so libWebDriver_core.so libWebDriver_extension_qt_base.so libWebDriver_extension_qt_web.so libWebDriver_extension_qt_quick.so libWebDriver_extension_qt_quick_web.so libAndroidWD_QML.so libAndroidWD_Widgets.so"
OUT_BIN_FILES="WebDriver WebDriver_noWebkit WebDriver_noWebkit_sharedLibs"

#generate wdversion.cc
python generate_wdversion.py

for platform in $platforms
do
  for mode in $modes
  do
    cd $root_dir

    OUTPUT_DIR=${output_gen}/$platform/$mode
    OUTPUT_DIR_OUT=${OUTPUT_DIR}/Default
    DIST_DIR=${output_gen}/dist/$platform/$mode

    gyp --depth . -G output_dir=. -D platform=$platform -D mode=$mode -D ROOT_PATH=${base_output_gen} -D QT_DIR=${qt_dir} --generator-output=${output_gen}/$platform/$mode wd.gyp
    [ $? -ne 0 ] && exit 1
    cd $OUTPUT_DIR
    [ $? -ne 0 ] && echo "**** ERROR: Can't access to $OUTPUT_DIR" && exit 1
    make
    [ $? -ne 0 ] && exit 1
    mkdir -p ${DIST_DIR}/{bin,libs,h,Test}
    [ $? -ne 0 ] && echo "**** ERROR: Can't create $DIST_DIR" && exit 1

    # copy libraries
    for file in $OUT_STATIC_LIB_FILES; do cp -f $OUTPUT_DIR_OUT/$file $DIST_DIR/libs 2>/dev/null; done
    for file in $OUT_SHARED_LIB_FILES; do cp -f $OUTPUT_DIR_OUT/lib.target/$file $DIST_DIR/libs 2>/dev/null; done

    # copy headers
    cp -rf $root_dir/inc/* $DIST_DIR/h 2>/dev/null;
    cp -rf $root_dir/src/Test $DIST_DIR 2>/dev/null;

    # copy test binaries
    for file in $OUT_BIN_FILES
    do
      if [ -f $OUTPUT_DIR_OUT/$file ]
      then
        cp -f $OUTPUT_DIR_OUT/$file $DIST_DIR/bin 2>/dev/null
      fi
    done

  done
done
nefethael commented 3 years ago

Hello,

To build on Win10, I ended up generating src/webdriver/webdriver_version.cc by hand:

namespace webdriver {
extern const char kProductName[] = "WebDriver-cisco-cmt";
extern const char kVersionNumber[] = "1.3.3";
extern const char kBuildTime[] = __TIME__;
extern const char kBuildDate[] = __DATE__;
extern const char kLastChanges[] = "whatever";
}

Then I removed python generate_wdversion.py in build.bat

After that you also need to remove some lines in src/third_party/mongoose/mongoose.c

struct timespec {
  long tv_nsec;
  long tv_sec;
};

Finally, I needed to add macro definition in generated chromium_base.vcxproj & WebDriver_core.vcxproj

<PreprocessorDefinitions>_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;......

For the moment, I only succeeded to compile on vs2019, i'll ry to use it now :)

Hope it helps, Vincent