coapp-developers team mailing list archive
-
coapp-developers team
-
Mailing list archive
-
Message #01242
Packages for different compilers/etc
Further to the conversation we had last week at the weekly conference call,
here's what I have for how coapp composes developer packages and how library
packages work.
We can go over this more at the conf call online tomorrow.
============================================================================
============================================================================
Assumptions:
- nearly nothing here is "forced"; we're aiming for solid "best practices"
- let's define "CRT" as a given "compiler::runtime library".
The significant ones that come to mind currently:
- VC6 - Visual C++ 6.0
- (may depend on msvcrt, mfc dlls?)
- VC7 - Visual C++ 7.0 (aka VC2002, aka VS.NET)
-- depends on MSVCR70 and friends
- VC71 - Visual C++ 7.1 (aka VC2003, aka VS.NET 2003)
-- depends on MSVCR71 and friends
- VC8 - Visual C++ 8 (aka VC2005, aka VS 2005)
-- depends on MSVCR80 and friends
- VC9 - Visual C++ 9 (aka VC2008, aka VS 2008)
-- depends on MSVCR90 and friends
- VC10 - Visual C++ 10 (aka VC2010, aka VS 2010, aka DEV10)
-- depends on MSVCR100 and friends
- VC11 - Visual C++ 11 (aka VC????, aka VS??? aka DEV11)
-- depends on ???? and friends
- MinGW4 - GCC/MinGW compiler suite (currently gcc 4.6)
-- depends on msvcrt, libgcc/libstdc++
- Should we call it MinGW46? Gcc4? Gcc46? something else?
- When is the binary compatibility going to break?
- packages can also be 'flavorless' -- ie, they don't have a CRT
distinction at all (and don't depend on a flavored package)
- generally speaking, we will have 1 package per "CRT" , per architecture.
- there should be an equivalent -dev package per library package
- in order to save on insane duplication, there should be a -dev-common pkg
that has the headers/docs/non-arch-specific files that the -dev package
can have a dependency to.
Inside the $COAPPROOT folder (ie, c:\apps ) : we will have a general layout
that looks like this:
c:\apps\
lib\
x86\
vc6\
vc7\
vc71\
vc8\
vc9\
vc10\
vc11\
gcc46\
x64\
vc6\
vc7\
vc71\
vc8\
vc9\
vc10\
vc11\
gcc46\
include\
assemblies\
anycpu\
x86\
x64\
for a given library 'foo', packages:
foo-1.2.3.4-x86-0000000000000000.msi
(flavorless shared library package x86)
foo-1.2.3.4-x64-0000000000000000.msi
(flavorless shared library package x64)
foo[vc10]-1.2.3.4-x86-0000000000000000.msi
(vc10 flavored shared library package x86)
installs to c:\apps\.installed\foocorp\foo[vc10]-1.2.3.4-x86\
foo[vc10]-1.2.3.4-x64-0000000000000000.msi
(vc10 flavored shared library package x64)
installs to c:\apps\.installed\foocorp\foo[vc10]-1.2.3.4-x64\
foo-dev-1.2.3.4-x86-0000000000000000.msi
(flavorless developer library package x86)
contains:
.\lib
foo.lib
foo-static.lib
foo-dev-1.2.3.4-x64-0000000000000000.msi
(flavorless developer library package x64)
foo-dev[vc10]-1.2.3.4-x86-0000000000000000.msi
(vc10 flavored developer library package x86)
foo-dev[vc10]-1.2.3.4-x64-0000000000000000.msi
(vc10 flavored developer library package x64)
foo-dev-common-1.2.3.4-any-0000000000000000.msi
(common/shared headers, docs,etc for developer library package)
contains:
.\include
all the -dev-n.n.n.n-arch packages have a dependency on -dev-common-n.n.n.n-any
c:\apps\
lib\
x86\ (symlinks to)
foo.lib
=> $INSTALLED\foocorp\foo-1.2.3.4-x86\lib\foo.lib
foo-static.lib
=> $INSTALLED\foocorp\foo-1.2.3.4-x86\lib\foo-static.lib
foo-1.2.3.4.lib
=> $INSTALLED\foocorp\foo-1.2.3.4-x86\lib\foo.lib
foo-1.2.3.4-static.lib
=> $INSTALLED\foocorp\foo-1.2.3.4-x86\lib\foo-static.lib
vc6\
vc7\
vc71\
vc8\
vc9\
vc10\
foo.lib (`active` version)
=> $INSTALLED\foocorp\foo[vc10]-1.2.3.4-x86\lib\foo.lib
foo-static.lib (`active` version)
=> $INSTALLED\foocorp\foo[vc10]-1.2.3.4-x86\lib\foo-static.lib
foo-1.2.3.4.lib (version-specific)
=> $INSTALLED\foocorp\foo[vc10]-1.2.3.4-x86\lib\foo.lib
foo-static-1.2.3.4.lib (version-specific)
=> $INSTALLED\foocorp\foo[vc10]-1.2.3.4-x86\lib\foo-static.lib
vc11\
gcc46\
x64\
vc6\
vc7\
vc71\
vc8\
vc9\
vc10\
vc11\
gcc46\
include\
foo\ ('active' version)
=> $INSTALLED\foocorp\foo-dev-common-1.2.3.4-any\include\
foo-1.2.3.4\ (version-specific)
=> $INSTALLED\foocorp\foo-dev-common-1.2.3.4-any\include\
Since .NET libraries don't need include files and .lib files, they should be a
lot simpler:
assemblies\
anycpu\
foodotnet.dll ('active' version)
=> $INSTALLED\foocorp\foo-1.2.3.4-any\foodotnet.dll
foodotnet-1.2.3.4\
foodotnet.dll (version-specific)
=> $INSTALLED\foocorp\foo-1.2.3.4-any\foodotnet.dll
x86\
foodotnet.dll
foodotnet-1.2.3.4\
foodotnet.dll
x64\
foodotnet.dll
foodotnet-1.2.3.4\
foodotnet.dll