How to build PassSync


Mozilla components (NSPR, NSS, LDAPSDK)

Most of the Mozilla components use the MozillaBuild environment the MozillaBuild package contains an msys environment (a bash shell, many standard posix commands, perl, cvs, ssh, hg).

To use this on the 64-bit machine, you should also look at which shows that you need to use a specific cmd shell (\windows\syswow64\cmd.exe) to be able to use Mozilla-Build on a 64-bit Windows machine.

Start a build environment using the right .bat file. For a 64-bit build environment, use


For a 32-bit build environment, use


Using the Mozilla-Build environment is great because you don’t have to figure out how to use mks or cygwin or msys to download and configure a working build environment. Mozilla-Build includes everything you need and “it Just Works.”

Visual C++

Use Microsoft Visual Studio 2008 (aka VC9.0).

Note that you can use the Microsoft Visual C++ Express Edition instead of the full ($$$) edition, but it does not come with the redistributable C++ runtime merge modules, so you can create binaries and redistribute them, you’ll have to get the users to go to the Microsoft web site and download and install the correct C++ runtime. When you install C++ and its prerequisites/dependencies, this creates new Start menu items to open cmd windows with the environment set up to use the compiler, linker, etc. from the command line. This is used to build items that do not require the msys environment. Note: this is different from using the Mozilla-Build environment for performing 64-bit builds.

This is nice because you don’t have to figure out how to set up your PATH, LIB, INCLUDE, etc. to compile things. It Just Works.

Windows Support Tools

Some packages can use bitsadmin from the Windows Support Tools package to download dependencies using http (not ftp nor https). This may be installed in \Program Files\Support Tools, and in newer systems it may already be in the PATH.

This is nice because some packages used to require an entire mks/cygwin/msys environment just to use wget and unzip. Since http and unzip functionality are included with Windows now, builds are much simpler.

How to build NSPR

Start out by visiting the official NSPR build instructions from Mozilla:

How to build NSS


Unlike NSPR and most other open source software which use autotools (autoconf, libtool, etc), NSS uses something called coreconf. Therefore, building NSS requires a basic understanding of how coreconf works. Instead of passing parameters to configure, core conf uses environment variables or passing parameters to make. Here is a list used by coreconf for NSS builds: NSS Environment Variables.

You can find more info on building NSS on the Mozilla Developer website: NSS Build Instructions

Required Components


How to build Mozilla LDAPSDK

The latest version is 6.0.6

Here are the individual steps to building.

1) checkout the source

cvs -d export -rLDAPCSDK_6_0_6_RTM DirectorySDKSourceC

2) create the built directory


3) run the configure script to set up the build

#32-bit Debug
cd $PLATFORM && ../mozilla/directory/c-sdk/configure -disable-optimize --enable-debug --enable-clu \
 --with-nspr=/i/components/nspr/v4.8/WINNT5.2_DBG.OBJ \
 --with-nspr-inc=/i/components/nspr/v4.8/WINNT5.2_DBG.OBJ/include \
 --with-nss=/i/components/nss/NSS_3_12_4_RTM/WINNT5.2_DBG.OBJ \
 #32-bit Opt
cd $PLATFORM && ../mozilla/directory/c-sdk/configure -enable-optimize --disable-debug --enable-clu \
 --with-nspr=/i/components/nspr/v4.8/WINNT5.2_OPT.OBJ \
 --with-nspr-inc=/i/components/nspr/v4.8/WINNT5.2_OPT.OBJ/include \
 --with-nss=/i/components/nss/NSS_3_12_4_RTM/WINNT5.2_OPT.OBJ \
#64-bit Debug
cd $PLATFORM && ../mozilla/directory/c-sdk/configure --enable-64bit --disable-optimize --enable-debug --enable-clu \
 --with-nspr=/i/components/nspr/v4.8/WINNT5.2_64_DBG.OBJ \
 --with-nspr-inc=/i/components/nspr/v4.8/WINNT5.2_64_DBG.OBJ/include \
 --with-nss=/i/components/nss/NSS_3_12_4_RTM/WINNT5.2_64_DBG.OBJ \
#64-bit Opt
cd $PLATFORM && ../mozilla/directory/c-sdk/configure --enable-64bit --enable-optimize --disable-debug --enable-clu \
 --with-nspr=/i/components/nspr/v4.8/WINNT5.2_64_OPT.OBJ \
 --with-nspr-inc=/i/components/nspr/v4.8/WINNT5.2_64_OPT.OBJ/include \
 --with-nss=/i/components/nss/NSS_3_12_4_RTM/WINNT5.2_64_OPT.OBJ \
 --with-nss-inc=/i/components/nss/NSS_3_12_4_RTM/WINNT5.2_64_OPT.OBJ/include \

4) compile


Password Synchronization (PassSync)



  1. install VC++, Windows SDK, MozillaBuild, bitsadmin (if not already installed)
  2. download WiX from
  3. download winsync source code from tagged URL (see below)

Steps to build

The following Environment needs to included the following: (NOTE: CPU=AMD64 is case sensitive, ugh!) (NOTE: if VERSION is set, it will override the version and use that one.)

set CPU=AMD64 # for a 64-bit build only
set BUILD_DEBUG=optimize
  1. open a VC++ or SDK cmd window set up for the 32-bit or 64-bit build environment
  2. cd \path\to\winsync
  3. run set_envs.bat or manually set environment variables (See Environment above)
  4. kick off the build

    nmake /f winsync.mak passsync >  %PLATFORM%.log 2>&1
    #for example
    nmake /f winsync.mak passsync >  WINNT5.2_64_OPT.log 2>&1

The resultant file will be in dist\WINNT5.2_[64_]OPT.OBJ called 389-PassSync-${VERSION}-${ARCH}.msi e.g. 389-PassSync-1.1.4-x86_64.msi


These must be installed first before doing anything else.


Required Components

See winsync\passwordsync\build.bat for the specific nspr, nss, etc. paths.


Use set to set these in your environment before invoking nmake, or set on the nmake command line

Also look at the winsync\passwordsync\build.bat for other environment variables


  1. open a VC++ or SDK cmd window set up for the 32-bit or 64-bit build environment
  2. cd \path\to\winsync
  3. set BUILD_DEBUG=optimize
  4. nmake /f winsync.mak passsync > log.PLATFORM 2>&1

You can use the MozillaBuild/msys window to tail -f log.PLATFORM to see the build progress. The build attempts to download components from SBC and SBV using the bitsadmin command. Downloaded components are put in the components\PLATFORM subdirectory. Things built by the build process will be put in the built\PLATFORM subdirectory. The final .msi package will be in the dist\PLATFORM directory and will be called 389-PassSync-VERSION-PLATFORM.msi e.g. 389-PassSync-1.1.4-x86_64.msi

Last modified on 7 August 2014