blob: 418cac3d301702463257bc05c3785c8031be05f9 [file] [log] [blame]
<#
.SYNOPSIS
Configures CouchDB for building.
.DESCRIPTION
This command is responsible for generating the build
system for Apache CouchDB.
-WithCurl request that couchjs is linked to cURL (default false)
-DisableFauxton request build process skip building Fauxton (default false)
-DisableDocs request build process skip building documentation (default false)
-SkipDeps do not update Erlang dependencies (default false)
-CouchDBUser USER set the username to run as (defaults to current user)
Installation directories:
-Prefix PREFIX install architecture-independent files in PREFIX
[C:\Program Files\Apache\CouchDB]
-ExecPrefix EPREFIX install architecture-dependent files in EPREFIX
[same as PREFIX]
Fine tuning of the installation directories:
-BinDir DIR user executables [EPREFIX\bin]
-LibexecDir DIR program executables [EPREFIX\libexec]
-LibDir DIR object code libraries [EPREFIX\lib]
-SysconfDir DIR read-only single-machine data [PREFIX\etc]
-DataRootDir DIR read-only arch.-independent data root [PREFIX\share]
-LocalStateDir DIR modifiable single-machine data [PREFIX\var]
-RunStateDir DIR modifiable single-machine runstate data [LOCALSTATEDIR\run]
-DatabaseDir DIR specify the data directory [LOCALSTATEDIR\lib]
-ViewindexDir DIR specify the view directory [LOCALSTATEDIR\lib]
-LogDir DIR specify the log directory [LOCALSTATEDIR\log]
-DataDir DIR read-only architecture-independent data [DATAROOTDIR]
-ManDir DIR man documentation [DATAROOTDIR\man]
-DocDir DIR documentation root [DATAROOTDIR\doc\apache-couchdb]
-HTMLDir DIR html documentation [DOCDIR\html]
.LINK
http://couchdb.apache.org/
#>
#REQUIRES -Version 2.0
[cmdletbinding()]
Param(
[switch]$Test = $false,
[switch]$WithCurl = $false, # request that couchjs is linked to cURL (default false)
[switch]$DisableFauxton = $false, # do not build Fauxton
[switch]$DisableDocs = $false, # do not build any documentation or manpages
[switch]$SkipDeps = $false, # do not update erlang dependencies
[ValidateNotNullOrEmpty()]
[string]$CouchDBUser = [Environment]::UserName, # set the username to run as (defaults to current user)
[ValidateNotNullOrEmpty()]
[string]$Prefix = "C:\Program Files\Apache\CouchDB", # install architecture-independent file location (default C:\Program Files\Apache\CouchDB)
[ValidateNotNullOrEmpty()]
[string]$ExecPrefix = $Prefix, # install architecture-dependent file location (default C:\Program Files\Apache\CouchDB)
[ValidateNotNullOrEmpty()]
[string]$BinDir = "$ExecPrefix\bin", # user executable file location (default $ExecPrefix\bin)
[ValidateNotNullOrEmpty()]
[string]$LibExecDir = "$ExecPrefix\libexec", # user executable file location (default $ExecPrefix\libexec)
[ValidateNotNullOrEmpty()]
[string]$LibDir = "$ExecPrefix\lib", # object code libraries (default $ExecPrefix\lib)
[ValidateNotNullOrEmpty()]
[Alias("EtcDir")]
[string]$SysConfDir = "$Prefix\etc", # read-only single-machine data (default $Prefix\etc)
[ValidateNotNullOrEmpty()]
[string]$DataRootDir = "$Prefix\share", # read-only arch.-independent data root (default $Prefix\share)
[ValidateNotNullOrEmpty()]
[string]$LocalStateDir = "$Prefix\var", # modifiable single-machine data (default $Prefix\var)
[ValidateNotNullOrEmpty()]
[string]$RunStateDir = "$LocalStateDir\run", # modifiable single-machine run state (default $LocalStateDir\run)
[ValidateNotNullOrEmpty()]
[string]$DatabaseDir = "$LocalStateDir\lib", # database directory (default $LocalStateDir\lib)
[ValidateNotNullOrEmpty()]
[string]$ViewIndexDir = "$LocalStateDir\lib", # database view index directory (default $LocalStateDir\lib)
[ValidateNotNullOrEmpty()]
[string]$LogDir = "$LocalStateDir\log", # logging directory (default $LocalStateDir\log)
[ValidateNotNullOrEmpty()]
[string]$DataDir = "$DataRootDir", # read-only arch.-independent data (default $DataRootDir)
[ValidateNotNullOrEmpty()]
[string]$ManDir = "$DataRootDir\man", # man documentation (default $DataRootDir\man)
[ValidateNotNullOrEmpty()]
[string]$DocDir = "$DataRootDir\doc\apache-couchdb", # man documentation (default $DataRootDir\doc\apache-couchdb)
[ValidateNotNullOrEmpty()]
[string]$HTMLDir = "$DocDir\html" # html documentation (default $DocDir\html)
)
# determine this script’s directory and change to it
$rootdir = split-path -parent $MyInvocation.MyCommand.Definition
Push-Location $rootdir
[Environment]::CurrentDirectory = $PWD
# We use this for testing this script
# The test script lives in test/build/test-configure.sh
If ($Test) {
Write-Output @"
"$Prefix" "$ExecPrefix" "$BinDir" "$LibExecDir" "$SysConfDir" "$DataRootDir" "$DataDir" "$LocalStateDir" "$RunStateDir" "$DocDir" "$LibDir" "$DatabaseDir" "$ViewIndexDir" "$LogDir" "$ManDir" "$HTMLDir"
"@
exit 0
}
# Translate ./configure variables to CouchDB variables
$PackageAuthorName="The Apache Software Foundation"
$InstallDir="$LibDir\couchdb"
$LogFile="$LogDir\couch.log"
$BuildFauxton = [int](-not $DisableFauxton)
$BuildDocs = [int](-not $DisableDocs)
$Hostname = [System.Net.Dns]::GetHostEntry([string]"localhost").HostName
Write-Verbose "==> configuring couchdb in rel\couchdb.config"
$CouchDBConfig = @"
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
%
% The contents of this file are auto-generated by configure
%
{package_author_name, "$PackageAuthorName"}.
{prefix, "."}.
{data_dir, "./data"}.
{view_index_dir, "./data"}.
{log_file, ""}.
{fauxton_root, "./share/www"}.
{user, "$CouchDBUser"}.
{node_name, "-name couchdb@localhost"}.
{cluster_port, 5984}.
{backend_port, 5986}.
"@
$CouchDBConfig | Out-File "$rootdir\rel\couchdb.config" -encoding ascii
#TODO: Output MS NMake file format? Stick with GNU Make?
$InstallMk = @"
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
# The contents of this file are auto-generated by configure
#
package_author_name = $PackageAuthorName
install_dir = $InstallDir
bin_dir = $BinDir
libexec_dir = $LibExecDir\couchdb
doc_dir = $DocDir\couchdb
sysconf_dir = $SysConfDir\couchdb
data_dir = $DataDir\couchdb
database_dir = $DatabaseDir
view_index_dir = $ViewIndexDir
log_file = $LogFile
html_dir = $HTMLDir
man_dir = $ManDir
with_fauxton = $BuildFauxton
with_docs = $BuildDocs
user = $CouchDBUser
"@
$InstallMk | Out-File "$rootdir\install.mk" -encoding ascii
$lowercurl = "$WithCurl".ToLower()
$ConfigERL = @"
{with_curl, $lowercurl}.
"@
$ConfigERL | Out-File "$rootdir\config.erl" -encoding ascii
# only update dependencies, when we are not in a release tarball
if ( (Test-Path .git -PathType Container) -and (-not $SkipDeps) ) {
Write-Verbose "==> updating dependencies"
rebar get-deps update-deps
}
Pop-Location
[Environment]::CurrentDirectory = $PWD
Write-Verbose "You have configured Apache CouchDB, time to relax. Relax."