1*ba62d9d3SAndroid Build Coastguard Worker# Copyright (c) 2018, Intel Corporation 2*ba62d9d3SAndroid Build Coastguard Worker# 3*ba62d9d3SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a 4*ba62d9d3SAndroid Build Coastguard Worker# copy of this software and associated documentation files (the "Software"), 5*ba62d9d3SAndroid Build Coastguard Worker# to deal in the Software without restriction, including without limitation 6*ba62d9d3SAndroid Build Coastguard Worker# the rights to use, copy, modify, merge, publish, distribute, sublicense, 7*ba62d9d3SAndroid Build Coastguard Worker# and/or sell copies of the Software, and to permit persons to whom the 8*ba62d9d3SAndroid Build Coastguard Worker# Software is furnished to do so, subject to the following conditions: 9*ba62d9d3SAndroid Build Coastguard Worker# 10*ba62d9d3SAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included 11*ba62d9d3SAndroid Build Coastguard Worker# in all copies or substantial portions of the Software. 12*ba62d9d3SAndroid Build Coastguard Worker# 13*ba62d9d3SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14*ba62d9d3SAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15*ba62d9d3SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 16*ba62d9d3SAndroid Build Coastguard Worker# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 17*ba62d9d3SAndroid Build Coastguard Worker# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 18*ba62d9d3SAndroid Build Coastguard Worker# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 19*ba62d9d3SAndroid Build Coastguard Worker# OTHER DEALINGS IN THE SOFTWARE. 20*ba62d9d3SAndroid Build Coastguard Worker 21*ba62d9d3SAndroid Build Coastguard Worker 22*ba62d9d3SAndroid Build Coastguard Workerif(NOT DEFINED _os_release_info) 23*ba62d9d3SAndroid Build Coastguard Workerset(_os_release_info TRUE) 24*ba62d9d3SAndroid Build Coastguard Worker 25*ba62d9d3SAndroid Build Coastguard Worker 26*ba62d9d3SAndroid Build Coastguard Worker# os_release_info.cmake - Function to dump OS name and version 27*ba62d9d3SAndroid Build Coastguard Worker 28*ba62d9d3SAndroid Build Coastguard Worker# This file has no dependencies on other files (e.g., functions or definitions) 29*ba62d9d3SAndroid Build Coastguard Worker# of the local cmake environment. 30*ba62d9d3SAndroid Build Coastguard Worker 31*ba62d9d3SAndroid Build Coastguard Worker# Set cmake policies for at least this level: 32*ba62d9d3SAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.8.12) 33*ba62d9d3SAndroid Build Coastguard Worker 34*ba62d9d3SAndroid Build Coastguard Worker 35*ba62d9d3SAndroid Build Coastguard Worker# Function get_os_release_info - Determine and return OS name and version 36*ba62d9d3SAndroid Build Coastguard Worker# 37*ba62d9d3SAndroid Build Coastguard Worker# Args: 38*ba62d9d3SAndroid Build Coastguard Worker# 1. the name of a variable to receive os_name 39*ba62d9d3SAndroid Build Coastguard Worker# 2. the name of a variable to receive os_version 40*ba62d9d3SAndroid Build Coastguard Worker# 41*ba62d9d3SAndroid Build Coastguard Worker# Return values: (Quotation marks are always stripped). 42*ba62d9d3SAndroid Build Coastguard Worker# Upon failure, return values are null strings. 43*ba62d9d3SAndroid Build Coastguard Worker# 44*ba62d9d3SAndroid Build Coastguard Worker# Examples: 45*ba62d9d3SAndroid Build Coastguard Worker# os_name os_version 46*ba62d9d3SAndroid Build Coastguard Worker# -------------- ------- 47*ba62d9d3SAndroid Build Coastguard Worker# clear-linux-os 21180 (Changes twice daily) 48*ba62d9d3SAndroid Build Coastguard Worker# ubuntu 12.04 16.04 17.10 18.04 49*ba62d9d3SAndroid Build Coastguard Worker# fedora 27 50*ba62d9d3SAndroid Build Coastguard Worker# centos 6.9 7.4.1708 51*ba62d9d3SAndroid Build Coastguard Worker# 52*ba62d9d3SAndroid Build Coastguard Worker# Potential sources are tried (in order of preference) until a 53*ba62d9d3SAndroid Build Coastguard Worker# suitable one is found. 54*ba62d9d3SAndroid Build Coastguard Worker 55*ba62d9d3SAndroid Build Coastguard Worker# Implementation documentation: 56*ba62d9d3SAndroid Build Coastguard Worker# 57*ba62d9d3SAndroid Build Coastguard Worker# The potential sources, in order, are as follows. 58*ba62d9d3SAndroid Build Coastguard Worker# - /etc/centos-release 59*ba62d9d3SAndroid Build Coastguard Worker# Centos 7 also has /etc/os-release. File /etc/os-release is less 60*ba62d9d3SAndroid Build Coastguard Worker# precise about the Centos version (e.g., "7" instead of "7.4.1708"). 61*ba62d9d3SAndroid Build Coastguard Worker# For that reason, this file is checked first. 62*ba62d9d3SAndroid Build Coastguard Worker# Examples: 63*ba62d9d3SAndroid Build Coastguard Worker# CentOS release 6.9 (Final) 64*ba62d9d3SAndroid Build Coastguard Worker# CentOS Linux release 7.4.1708 (Core) 65*ba62d9d3SAndroid Build Coastguard Worker# - /usr/lib/os-release 66*ba62d9d3SAndroid Build Coastguard Worker# Present for Clear Linux, modern Fedora, and Ubuntu since some time 67*ba62d9d3SAndroid Build Coastguard Worker# between 14.04 and 16.04. The ID and VERSION_ID values are used. 68*ba62d9d3SAndroid Build Coastguard Worker# Examples: 69*ba62d9d3SAndroid Build Coastguard Worker# ID=clear-linux-os VERSION_ID=21180 70*ba62d9d3SAndroid Build Coastguard Worker# ID=fedora VERSION_ID=27 71*ba62d9d3SAndroid Build Coastguard Worker# ID=ubuntu VERSION_ID="14.04" 72*ba62d9d3SAndroid Build Coastguard Worker# ID=ubuntu VERSION_ID="16.04" 73*ba62d9d3SAndroid Build Coastguard Worker# ID="ubuntu" VERSION_ID="17.10" 74*ba62d9d3SAndroid Build Coastguard Worker# - /etc/os-release - Same form as (sometimes a link to) /usr/lib/os-release 75*ba62d9d3SAndroid Build Coastguard Worker# ID="Ubuntu" VERSION_ID="12.04" 76*ba62d9d3SAndroid Build Coastguard Worker# ID="Ubuntu" VERSION_ID="14.04" 77*ba62d9d3SAndroid Build Coastguard Worker# with a symbolic link: /etc/os-release -> ../usr/lib/os-release 78*ba62d9d3SAndroid Build Coastguard Worker# ID="CentOS Linux" VERSION_ID="7" Also: ID_LIKE="rhel fedora" 79*ba62d9d3SAndroid Build Coastguard Worker# - /etc/lsb-release 80*ba62d9d3SAndroid Build Coastguard Worker# For Centos, not too meaningful. 81*ba62d9d3SAndroid Build Coastguard Worker# Other "OS"s are more reasonable: 82*ba62d9d3SAndroid Build Coastguard Worker# DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 83*ba62d9d3SAndroid Build Coastguard Worker# DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 84*ba62d9d3SAndroid Build Coastguard Worker# DISTRIB_ID=Ubuntu DISTRIB_RELEASE=17.10 85*ba62d9d3SAndroid Build Coastguard Worker 86*ba62d9d3SAndroid Build Coastguard Worker 87*ba62d9d3SAndroid Build Coastguard Workerfunction(get_os_release_info _vn_id _vn_version_id) 88*ba62d9d3SAndroid Build Coastguard Worker set(_var_id "") 89*ba62d9d3SAndroid Build Coastguard Worker set(_var_version_id "") 90*ba62d9d3SAndroid Build Coastguard Worker 91*ba62d9d3SAndroid Build Coastguard Worker if("${_var_id}" STREQUAL "") 92*ba62d9d3SAndroid Build Coastguard Worker set(file_path "/etc/centos-release") 93*ba62d9d3SAndroid Build Coastguard Worker if(EXISTS "${file_path}") 94*ba62d9d3SAndroid Build Coastguard Worker # Example: CentOS release 6.9 (Final) 95*ba62d9d3SAndroid Build Coastguard Worker file(STRINGS "${file_path}" file_list LIMIT_COUNT 1) 96*ba62d9d3SAndroid Build Coastguard Worker list(GET file_list 0 file_line) 97*ba62d9d3SAndroid Build Coastguard Worker 98*ba62d9d3SAndroid Build Coastguard Worker # Remove all parenthesized items. 99*ba62d9d3SAndroid Build Coastguard Worker string(REGEX REPLACE "\\([^)]+\\)" "" file_line "${file_line}") 100*ba62d9d3SAndroid Build Coastguard Worker 101*ba62d9d3SAndroid Build Coastguard Worker # Extract start and end, discard optional "version" or "release" 102*ba62d9d3SAndroid Build Coastguard Worker string(REGEX MATCH "^([A-Za-z0-9_]+)( +(version|release))? +(.*)$" _dummy "${file_line}") 103*ba62d9d3SAndroid Build Coastguard Worker # 1 2 3 4 104*ba62d9d3SAndroid Build Coastguard Worker 105*ba62d9d3SAndroid Build Coastguard Worker set(_var_id "${CMAKE_MATCH_1}") 106*ba62d9d3SAndroid Build Coastguard Worker set(_var_version_id "${CMAKE_MATCH_4}") 107*ba62d9d3SAndroid Build Coastguard Worker endif() 108*ba62d9d3SAndroid Build Coastguard Worker endif() 109*ba62d9d3SAndroid Build Coastguard Worker 110*ba62d9d3SAndroid Build Coastguard Worker if("${_var_id}" STREQUAL "") 111*ba62d9d3SAndroid Build Coastguard Worker if(EXISTS "/usr/lib/os-release") 112*ba62d9d3SAndroid Build Coastguard Worker set(file_path "/usr/lib/os-release") 113*ba62d9d3SAndroid Build Coastguard Worker elseif(EXISTS "/etc/os-release") 114*ba62d9d3SAndroid Build Coastguard Worker set(file_path "/etc/os-release") 115*ba62d9d3SAndroid Build Coastguard Worker else() 116*ba62d9d3SAndroid Build Coastguard Worker set(file_path "") 117*ba62d9d3SAndroid Build Coastguard Worker endif() 118*ba62d9d3SAndroid Build Coastguard Worker 119*ba62d9d3SAndroid Build Coastguard Worker if(NOT "${file_path}" STREQUAL "") 120*ba62d9d3SAndroid Build Coastguard Worker file(STRINGS "${file_path}" data_list REGEX "^(ID|VERSION_ID)=") 121*ba62d9d3SAndroid Build Coastguard Worker 122*ba62d9d3SAndroid Build Coastguard Worker # Look for lines like "ID="..." and VERSION_ID="..." 123*ba62d9d3SAndroid Build Coastguard Worker foreach(_var ${data_list}) 124*ba62d9d3SAndroid Build Coastguard Worker if("${_var}" MATCHES "^(ID)=(.*)$") 125*ba62d9d3SAndroid Build Coastguard Worker set(_var_id "${CMAKE_MATCH_2}") 126*ba62d9d3SAndroid Build Coastguard Worker elseif("${_var}" MATCHES "^(VERSION_ID)=(.*)$") 127*ba62d9d3SAndroid Build Coastguard Worker set(_var_version_id "${CMAKE_MATCH_2}") 128*ba62d9d3SAndroid Build Coastguard Worker endif() 129*ba62d9d3SAndroid Build Coastguard Worker endforeach() 130*ba62d9d3SAndroid Build Coastguard Worker endif() 131*ba62d9d3SAndroid Build Coastguard Worker endif() 132*ba62d9d3SAndroid Build Coastguard Worker 133*ba62d9d3SAndroid Build Coastguard Worker if("${_var_id}" STREQUAL "") 134*ba62d9d3SAndroid Build Coastguard Worker set(file_path "/etc/lsb-release") 135*ba62d9d3SAndroid Build Coastguard Worker if(EXISTS "${file_path}") 136*ba62d9d3SAndroid Build Coastguard Worker file(STRINGS "${file_path}" data_list REGEX "^(DISTRIB_ID|DISTRIB_RELEASE)=") 137*ba62d9d3SAndroid Build Coastguard Worker 138*ba62d9d3SAndroid Build Coastguard Worker # Look for lines like "DISTRIB_ID="..." and DISTRIB_RELEASE="..." 139*ba62d9d3SAndroid Build Coastguard Worker foreach(_var ${data_list}) 140*ba62d9d3SAndroid Build Coastguard Worker if("${_var}" MATCHES "^(DISTRIB_ID)=(.*)$") 141*ba62d9d3SAndroid Build Coastguard Worker set(_var_id "${CMAKE_MATCH_2}") 142*ba62d9d3SAndroid Build Coastguard Worker elseif("${_var}" MATCHES "^(DISTRIB_RELEASE)=(.*)$") 143*ba62d9d3SAndroid Build Coastguard Worker set(_var_version_id "${CMAKE_MATCH_2}") 144*ba62d9d3SAndroid Build Coastguard Worker endif() 145*ba62d9d3SAndroid Build Coastguard Worker endforeach() 146*ba62d9d3SAndroid Build Coastguard Worker endif() 147*ba62d9d3SAndroid Build Coastguard Worker endif() 148*ba62d9d3SAndroid Build Coastguard Worker 149*ba62d9d3SAndroid Build Coastguard Worker string(TOLOWER "${_var_id}" "_var_id") 150*ba62d9d3SAndroid Build Coastguard Worker 151*ba62d9d3SAndroid Build Coastguard Worker string(STRIP "${_var_id}" _var_id) 152*ba62d9d3SAndroid Build Coastguard Worker string(STRIP "${_var_version_id}" _var_version_id) 153*ba62d9d3SAndroid Build Coastguard Worker 154*ba62d9d3SAndroid Build Coastguard Worker # Remove any enclosing quotation marks 155*ba62d9d3SAndroid Build Coastguard Worker string(REGEX REPLACE "^\"(.*)\"$" "\\1" _var_id "${_var_id}") 156*ba62d9d3SAndroid Build Coastguard Worker string(REGEX REPLACE "^\"(.*)\"$" "\\1" _var_version_id "${_var_version_id}") 157*ba62d9d3SAndroid Build Coastguard Worker 158*ba62d9d3SAndroid Build Coastguard Worker if(NOT "${_vn_id}" STREQUAL "") 159*ba62d9d3SAndroid Build Coastguard Worker set(${_vn_id} "${_var_id}" PARENT_SCOPE) 160*ba62d9d3SAndroid Build Coastguard Worker endif() 161*ba62d9d3SAndroid Build Coastguard Worker 162*ba62d9d3SAndroid Build Coastguard Worker if(NOT "${_vn_version_id}" STREQUAL "") 163*ba62d9d3SAndroid Build Coastguard Worker set(${_vn_version_id} "${_var_version_id}" PARENT_SCOPE) 164*ba62d9d3SAndroid Build Coastguard Worker endif() 165*ba62d9d3SAndroid Build Coastguard Worker 166*ba62d9d3SAndroid Build Coastguard Workerendfunction() 167*ba62d9d3SAndroid Build Coastguard Worker 168*ba62d9d3SAndroid Build Coastguard Worker 169*ba62d9d3SAndroid Build Coastguard Workerendif(NOT DEFINED _os_release_info) 170