xref: /aosp_15_r20/external/intel-media-driver/os_release_info.cmake (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
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