I think this is a great idea.
However a word of warning. How this applied could break existing code people
have.
Changing the env[“PLATFORM”] from posix to something like “linux” or
“Linux_debian” is not backward compatible.
The reality is that a string was used for good or bad.
I would suggest that we defined something new so we don’t break existing build
code. I know I have suggested something from parts, but I seem to have to make
it a 100% independent package on pypi for it to be used by SCons.
I think we need to look at Greg’s Noel IAPAT idea. I been calling it settings
and have a great start of it going on Parts. I don’t think we want do this kind
of change without some thought.
I personally think we should deprecate PLATFORM and replace it with a HOST_XXX
and TARGET_XXX value. Where XXX would be values like:
1) OS ( this is abstract)
2) OS-VARIANT/ Vender ( this is detailed)
3) Architecture ( this is abstract)
4) CPU-Type( this is detailed)
I have found over and over again people need, as you get more low level, more
detail. But to much detail can be a problem if one does not provide a good
abstraction to replace it.
People need detail something like this is fedora or redhat, or the only need
details such as this is windows or posix.
I know one item I would fix in the Parts Api for SystemPlatform would have been
to move to use of functions for the abstract layers vs string or enums.
Functions such as isX86() or isx86_64(), or isPosix or isLinux() I think will
work better long term as it provides way to say useful stuff without knowing
details that might change in unexpected ways. I have learned what seems good
today probably will not make as much sense tomorrow, normally for reason we
cannot foresee.
I should also note maintaining more detail will have a higher maintainer cost.
Jason
From: Russel Winder
Sent: Tuesday, January 19, 2016 5:42 AM
To: SCons_Developers
Subject: Re: [Scons-dev] Distinguishing Debian and Fedora
The following is a "doodle" for the direction I think the whole
platform detection thing should go. It is all about removing strings as
selectors, which has to be a bad thing given the propensity of many to
mis-spell things.
from enum import Enum, unique
@unique
class OS_Type(Enum):
posix = 0
linux_debian = 1
linux_fedora = 2
darwin = 3
windows_win32 = 4
windows_cygwin = 5
windows_mingw = 6
def which_posix():
with open('/etc/os-release') as f:
for line in f:
if 'ID' in line:
return {
'debian': OS_Type.linux_debian,
'fedora': OS_Type.linux_fedora,
}[line.split('=')[1].strip()]
return OS_Type.posix
environment = Environment(
tools=('g++', 'gnulink'),
)
platform = {
'posix': which_posix(),
'darwin': OS_Type.darwin,
}[environment['PLATFORM']]
environment.MergeFlags('!pkg-config --cflags --libs gtkmm-3.0')
if platform == OS_Type.linux_fedora:
environment.MergeFlags('!pkg-config --cflags --libs gstreamermm-
0.10')
elif platform == OS_Type.linux_debian:
environment.MergeFlags('!pkg-config --cflags --libs gstreamermm-
1.0')
else:
print('Platform not understood.')
Exit(1)
environment.Program('stuff.cpp', CXXFLAGS=['-std=c++14', '-W', '-
Wall'])
--
Russel.
=============================================================================
Dr Russel Winder t: +44 20 7585 2200 voip: sip:[email protected]
41 Buckmaster Road m: +44 7770 465 077 xmpp: [email protected]
London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev