Merge pull request #671 from yitam/updateBuild
Modified Readme and scripts to accept path to source in command line
This commit is contained in:
commit
ae054acb1d
|
@ -14,7 +14,7 @@ To use the sample build scripts `builddrivers.py` and `buildtools.py`, install P
|
|||
|
||||
You must first be able to build PHP 7.* without including our PHP extensions. For help with building PHP 7.0* or PHP 7.1* in Windows, see the [official PHP website](https://wiki.php.net/internals/windows/stepbystepbuild). For PHP 7.2 or above, visit [PHP SDK page](https://github.com/OSTC/php-sdk-binary-tools) for new instructions.
|
||||
|
||||
The Microsoft Drivers for PHP for SQL Server have been compiled and tested with PHP 7.0.* and 7.1.* using Visual C++ 2015 as well as PHP 7.2.0 beta using Visual C++ 2017 v15.0.
|
||||
The Microsoft Drivers for PHP for SQL Server have been compiled and tested with PHP 7.0.* and 7.1.* using Visual C++ 2015 as well as PHP 7.2.1 using Visual C++ 2017 v15.5.
|
||||
|
||||
### Manually building from source
|
||||
|
||||
|
@ -57,7 +57,7 @@ PHP recommends to unzip the PHP SDK into the shortest possible path, preferrably
|
|||
|
||||
3. Interactive mode:
|
||||
* Type `py builddrivers.py` to start the interactive mode. Use lower cases to answer the following questions:
|
||||
* PHP Version (e.g. `7.1.7` or `7.2.0beta2`)
|
||||
* PHP Version (e.g. `7.1.7` or `7.2.1`)
|
||||
* 64-bit?
|
||||
* Thread safe?
|
||||
* Driver?
|
||||
|
@ -68,8 +68,8 @@ PHP recommends to unzip the PHP SDK into the shortest possible path, preferrably
|
|||
4. Use Command-line arguments
|
||||
* Type `py builddrivers.py -h` to get a list of options and their descriptions
|
||||
* For example,
|
||||
* `py builddrivers.py --PHPVER=7.0.22 --ARCH=x64 --THREAD=nts --DRIVER=sqlsrv --SOURCE`
|
||||
* `py builddrivers.py --PHPVER=7.1.8 --ARCH=x86 --THREAD=ts --DEBUG`
|
||||
* `py builddrivers.py --PHPVER=7.2.1 --ARCH=x64 --THREAD=nts --DRIVER=sqlsrv --SOURCE=C:\local\source`
|
||||
* `py builddrivers.py --PHPVER=7.1.13 --ARCH=x86 --THREAD=ts --DEBUG`
|
||||
|
||||
5. Based on the given configuration, if the script detects the presence of the PHP source directory, you can choose whether to rebuild, clean or superclean:
|
||||
* `rebuild` to build again using the same configuration (32 bit, thread safe, etc.)
|
||||
|
|
|
@ -33,7 +33,6 @@ class BuildDriver(object):
|
|||
util # BuildUtil object whose constructor takes phpver, driver, arch, thread, debug
|
||||
repo # GitHub repository
|
||||
branch # GitHub repository branch
|
||||
download_source # download source from GitHub or not
|
||||
dest_path # alternative destination for the drivers (None for development builds)
|
||||
rebuild # a boolean flag - whether the user is rebuilding
|
||||
make_clean # a boolean flag - whether make clean is necessary
|
||||
|
@ -41,16 +40,15 @@ class BuildDriver(object):
|
|||
testing # whether the user has turned on testing mode
|
||||
"""
|
||||
|
||||
def __init__(self, phpver, driver, arch, thread, debug, repo, branch, download, path, testing):
|
||||
def __init__(self, phpver, driver, arch, thread, debug, repo, branch, source, path, testing):
|
||||
self.util = BuildUtil(phpver, driver, arch, thread, debug)
|
||||
self.repo = repo
|
||||
self.branch = branch
|
||||
self.download_source = download
|
||||
self.source_path = source
|
||||
self.dest_path = path
|
||||
self.testing = testing
|
||||
self.rebuild = False
|
||||
self.make_clean = False
|
||||
self.source_path = None # None initially but will be set later if not downloading from GitHub
|
||||
|
||||
def show_config(self):
|
||||
print()
|
||||
|
@ -58,6 +56,7 @@ class BuildDriver(object):
|
|||
print('Arch: ', self.util.arch)
|
||||
print('Thread: ', self.util.thread)
|
||||
print('Driver: ', self.util.driver)
|
||||
print('Source: ', self.source_path)
|
||||
print('Debug enabled: ', self.util.debug_enabled)
|
||||
print()
|
||||
|
||||
|
@ -91,6 +90,28 @@ class BuildDriver(object):
|
|||
|
||||
os.chdir(work_dir) # change back to the working directory
|
||||
|
||||
def get_local_source(self, source_path):
|
||||
"""This assumes interactive mode (not testing) and takes care of getting
|
||||
the user's input to the path of the local source files for the drivers
|
||||
"""
|
||||
while True:
|
||||
if source_path is None:
|
||||
source = input('Enter the full path to the source folder: ')
|
||||
else:
|
||||
source = input("Hit ENTER to use '" + source_path + "' or provide another path to the source folder: ")
|
||||
if len(source) == 0:
|
||||
source = source_path
|
||||
|
||||
valid = True
|
||||
if os.path.exists(source) and os.path.exists(os.path.join(source, 'shared')):
|
||||
# Checking the existence of 'shared' folder only, assuming
|
||||
# sqlsrv and/or pdo_sqlsrv are also present if it exists
|
||||
self.source_path = source
|
||||
break
|
||||
|
||||
print("The path provided is invalid. Please re-enter.")
|
||||
return source
|
||||
|
||||
def build_extensions(self, root_dir, logfile):
|
||||
"""This takes care of getting the drivers' source files, building the drivers.
|
||||
If dest_path is defined, the binaries will be copied to the designated destinations.
|
||||
|
@ -102,27 +123,14 @@ class BuildDriver(object):
|
|||
"""
|
||||
work_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
if self.download_source:
|
||||
if self.source_path is None:
|
||||
# This will download from the specified branch on GitHub repo and copy the source
|
||||
self.util.download_msphpsql_source(repo, branch)
|
||||
else:
|
||||
# This case only happens when building for development
|
||||
while True:
|
||||
if self.source_path is None:
|
||||
source = input('Enter the full path to the Source folder: ')
|
||||
else:
|
||||
source = input("Hit ENTER to reuse '" + self.source_path + "' or provide another path to the Source folder: ")
|
||||
if len(source) == 0:
|
||||
source = self.source_path
|
||||
|
||||
valid = True
|
||||
if os.path.exists(source) and os.path.exists(os.path.join(source, 'shared')):
|
||||
# Checking the existence of 'shared' folder only, assuming
|
||||
# sqlsrv and/or pdo_sqlsrv are also present if it exists
|
||||
self.source_path = source
|
||||
break
|
||||
|
||||
print("The path provided is invalid. Please re-enter.")
|
||||
# Do not prompt user for input if it's in a testing mode
|
||||
if not self.testing:
|
||||
source = self.get_local_source(self.source_path)
|
||||
|
||||
print('Copying source files from', source)
|
||||
|
||||
|
@ -169,7 +177,10 @@ class BuildDriver(object):
|
|||
|
||||
quit = False
|
||||
while not quit:
|
||||
if not self.rebuild and not self.testing:
|
||||
if self.testing:
|
||||
self.make_clean = True
|
||||
self.util.remove_old_builds(work_dir)
|
||||
elif not self.rebuild:
|
||||
self.clean_or_remove(root_dir, work_dir)
|
||||
|
||||
logfile = self.util.get_logfile_name()
|
||||
|
@ -223,7 +234,7 @@ if __name__ == '__main__':
|
|||
parser.add_argument('--DEBUG', action='store_true', help="enable debug mode (default: False)")
|
||||
parser.add_argument('--REPO', default='Microsoft', help="GitHub repository (default: Microsoft)")
|
||||
parser.add_argument('--BRANCH', default='dev', help="GitHub repository branch (default: dev)")
|
||||
parser.add_argument('--SOURCE', action='store_true', help="get source from a local path (default: False)")
|
||||
parser.add_argument('--SOURCE', default=None, help="a local path to source file (default: None)")
|
||||
parser.add_argument('--TESTING', action='store_true', help="turns on testing mode (default: False)")
|
||||
parser.add_argument('--DESTPATH', default=None, help="an alternative destination for the drivers (default: None)")
|
||||
|
||||
|
@ -236,7 +247,7 @@ if __name__ == '__main__':
|
|||
debug = args.DEBUG
|
||||
repo = args.REPO
|
||||
branch = args.BRANCH
|
||||
download = args.SOURCE is False
|
||||
source = args.SOURCE
|
||||
path = args.DESTPATH
|
||||
testing = args.TESTING
|
||||
|
||||
|
@ -259,9 +270,7 @@ if __name__ == '__main__':
|
|||
debug_mode = input("Debug enabled? [y/n]: ")
|
||||
|
||||
answer = input("Download source from a GitHub repo? [y/n]: ")
|
||||
download = False
|
||||
if answer == 'yes' or answer == 'y' or answer == '':
|
||||
download = True
|
||||
repo = input("Name of the repo (hit enter for 'Microsoft'): ")
|
||||
branch = input("Name of the branch (hit enter for 'dev'): ")
|
||||
if repo == '':
|
||||
|
@ -282,7 +291,7 @@ if __name__ == '__main__':
|
|||
debug,
|
||||
repo,
|
||||
branch,
|
||||
download,
|
||||
source,
|
||||
path,
|
||||
testing)
|
||||
builder.build()
|
||||
|
|
Loading…
Reference in a new issue