meson: Fix for OEM header collision issue

It needs to be possible to build libpldm with any number of oem features
enabled simultaneously. If the header files are same then the earlier
implementation will not work.

Install the header file in a way that doesn't break any oem portions.
Also the symlinks are generated to the older location until we migrate
the applications using the files to new location.

Tested: The headers are installed in the new location
and symlinks are generated.

Change-Id: I1455d52ff4b0c7f74b49d136bf582182537592d1
Signed-off-by: Pavithra Barithaya <pavithra.b@ibm.com>
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
diff --git a/include/libpldm/meson.build b/include/libpldm/meson.build
index bcac312..076b0aa 100644
--- a/include/libpldm/meson.build
+++ b/include/libpldm/meson.build
@@ -1,4 +1,4 @@
-libpldm_headers += files(
+libpldm_headers = files(
   'base.h',
   'bios.h',
   'bios_table.h',
@@ -13,21 +13,27 @@
   'state_set.h',
   'states.h',
   'transport.h',
+  'transport/af-mctp.h',
+  'transport/mctp-demux.h',
   'utils.h',
   )
 
-libpldm_transport_headers += files(
-  'transport/af-mctp.h',
-  'transport/mctp-demux.h'
-)
-
 if get_option('oem-ibm').allowed()
   libpldm_headers += files(
-    'oem/ibm/libpldm/entity_oem_ibm.h',
-    'oem/ibm/libpldm/file_io.h',
-    'oem/ibm/libpldm/fru_oem_ibm.h',
-    'oem/ibm/libpldm/host.h',
-    'oem/ibm/libpldm/platform_oem_ibm.h',
-    'oem/ibm/libpldm/state_set_oem_ibm.h'
+    'oem/ibm/entity.h',
+    'oem/ibm/file_io.h',
+    'oem/ibm/fru.h',
+    'oem/ibm/host.h',
+    'oem/ibm/platform.h',
+    'oem/ibm/state_set.h'
   )
+
+  install_symlink('file_io.h', pointing_to: 'oem/ibm/file_io.h', install_dir: 'include/libpldm')
+  install_symlink('entity_oem_ibm.h', pointing_to: 'oem/ibm/entity.h', install_dir: 'include/libpldm')
+  install_symlink('fru_oem_ibm.h', pointing_to: 'oem/ibm/fru.h', install_dir: 'include/libpldm')
+  install_symlink('host.h', pointing_to: 'oem/ibm/host.h', install_dir: 'include/libpldm')
+  install_symlink('platform_oem_ibm.h', pointing_to: 'oem/ibm/platform.h', install_dir: 'include/libpldm')
+  install_symlink('state_set_oem_ibm.h', pointing_to: 'oem/ibm/state_set.h', install_dir: 'include/libpldm')
 endif
+
+install_headers(libpldm_headers, subdir: 'libpldm', preserve_path: true)
diff --git a/include/libpldm/oem/ibm/libpldm/entity_oem_ibm.h b/include/libpldm/oem/ibm/entity.h
similarity index 100%
rename from include/libpldm/oem/ibm/libpldm/entity_oem_ibm.h
rename to include/libpldm/oem/ibm/entity.h
diff --git a/include/libpldm/oem/ibm/libpldm/file_io.h b/include/libpldm/oem/ibm/file_io.h
similarity index 100%
rename from include/libpldm/oem/ibm/libpldm/file_io.h
rename to include/libpldm/oem/ibm/file_io.h
diff --git a/include/libpldm/oem/ibm/libpldm/fru_oem_ibm.h b/include/libpldm/oem/ibm/fru.h
similarity index 100%
rename from include/libpldm/oem/ibm/libpldm/fru_oem_ibm.h
rename to include/libpldm/oem/ibm/fru.h
diff --git a/include/libpldm/oem/ibm/libpldm/host.h b/include/libpldm/oem/ibm/host.h
similarity index 100%
rename from include/libpldm/oem/ibm/libpldm/host.h
rename to include/libpldm/oem/ibm/host.h
diff --git a/include/libpldm/oem/ibm/libpldm/platform_oem_ibm.h b/include/libpldm/oem/ibm/platform.h
similarity index 100%
rename from include/libpldm/oem/ibm/libpldm/platform_oem_ibm.h
rename to include/libpldm/oem/ibm/platform.h
diff --git a/include/libpldm/oem/ibm/libpldm/state_set_oem_ibm.h b/include/libpldm/oem/ibm/state_set.h
similarity index 100%
rename from include/libpldm/oem/ibm/libpldm/state_set_oem_ibm.h
rename to include/libpldm/oem/ibm/state_set.h
diff --git a/meson.build b/meson.build
index 22fb826..86b2250 100644
--- a/meson.build
+++ b/meson.build
@@ -44,47 +44,10 @@
 add_project_arguments('-include', '@0@'.format(config), language: 'c')
 
 libpldm_include_dir = include_directories('include', is_system: true)
-libpldm_headers = files()
-libpldm_transport_headers = files()
+
 subdir('include')
-
-libpldm_sources = files()
 subdir('src')
 
-libpldm = library(
-  'pldm',
-   libpldm_sources,
-   implicit_include_directories: false,
-   include_directories: [
-     libpldm_include_dir,
-     include_directories('src')
-   ],
-   version: meson.project_version(),
-   gnu_symbol_visibility: 'hidden',
-   install: true
-   )
-
-install_headers(
-  libpldm_headers,
-  subdir:'libpldm'
-  )
-
-install_headers(
-  libpldm_transport_headers,
-  subdir:'libpldm/transport'
-  )
-
-libpldm_dep = declare_dependency(
-  include_directories: libpldm_include_dir
-,
-  link_with: libpldm)
-
-import('pkgconfig').generate(
-  name: 'libpldm',
-  description: 'PLDM protocol encode/decode C lib',
-  version: meson.project_version(),
-  libraries: libpldm)
-
 if get_option('tests').enabled()
   subdir('tests')
 
diff --git a/src/meson.build b/src/meson.build
index 5b9dd2f..77fd629 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,4 +1,4 @@
-libpldm_sources += files(
+libpldm_sources = files(
   'base.c',
   'bios.c',
   'platform.c',
@@ -16,3 +16,26 @@
 if get_option('oem-ibm').allowed()
    subdir('oem/ibm')
 endif
+
+libpldm = library(
+  'pldm',
+   libpldm_sources,
+   implicit_include_directories: false,
+   include_directories: [
+     libpldm_include_dir,
+     include_directories('.')
+   ],
+   version: meson.project_version(),
+   gnu_symbol_visibility: 'hidden',
+   install: true
+   )
+
+libpldm_dep = declare_dependency(
+  include_directories: libpldm_include_dir,
+  link_with: libpldm)
+
+import('pkgconfig').generate(
+  name: 'libpldm',
+  description: 'PLDM protocol encode/decode C lib',
+  version: meson.project_version(),
+  libraries: libpldm)
diff --git a/src/oem/ibm/file_io.c b/src/oem/ibm/file_io.c
index 1303bf6..71acf72 100644
--- a/src/oem/ibm/file_io.c
+++ b/src/oem/ibm/file_io.c
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
 #include <libpldm/base.h>
-#include <libpldm/oem/ibm/libpldm/file_io.h>
+#include <libpldm/oem/ibm/file_io.h>
 
 #include <endian.h>
 #include <string.h>
diff --git a/src/oem/ibm/host.c b/src/oem/ibm/host.c
index 6a79ac9..69e9193 100644
--- a/src/oem/ibm/host.c
+++ b/src/oem/ibm/host.c
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
 #include <libpldm/base.h>
-#include <libpldm/oem/ibm/libpldm/host.h>
+#include <libpldm/oem/ibm/host.h>
 
 #include <endian.h>
 #include <stdint.h>
diff --git a/src/oem/ibm/platform.c b/src/oem/ibm/platform.c
index 042044f..2c3741d 100644
--- a/src/oem/ibm/platform.c
+++ b/src/oem/ibm/platform.c
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
 #include <libpldm/platform.h>
-#include <libpldm/oem/ibm/libpldm/platform_oem_ibm.h>
+#include <libpldm/oem/ibm/platform.h>
 
 #include <string.h>
 
diff --git a/tests/oem/ibm/libpldm_fileio_test.cpp b/tests/oem/ibm/libpldm_fileio_test.cpp
index 3f9625e..1c92e58 100644
--- a/tests/oem/ibm/libpldm_fileio_test.cpp
+++ b/tests/oem/ibm/libpldm_fileio_test.cpp
@@ -1,6 +1,6 @@
 #include <endian.h>
 #include <libpldm/base.h>
-#include <libpldm/oem/ibm/libpldm/file_io.h>
+#include <libpldm/oem/ibm/file_io.h>
 
 #include <array>
 #include <cstdint>
diff --git a/tests/oem/ibm/libpldm_host_test.cpp b/tests/oem/ibm/libpldm_host_test.cpp
index 11f92d3..973f1c3 100644
--- a/tests/oem/ibm/libpldm_host_test.cpp
+++ b/tests/oem/ibm/libpldm_host_test.cpp
@@ -1,6 +1,6 @@
 #include <endian.h>
 #include <libpldm/base.h>
-#include <libpldm/oem/ibm/libpldm/host.h>
+#include <libpldm/oem/ibm/host.h>
 
 #include <array>
 #include <cstdint>